-// xestiacalendar_icaleventload.h - Xestia Calendar CalDAV Object Unit Tests
+// xestiacalendar_caldav.h - Xestia Calendar CalDAV Object Unit Tests
//
// (c) 2016 Xestia Software Development.
//
// with Xestia Calendar. If not, see <http://www.gnu.org/licenses/>
#include "../objects/CalDAV/CalDAV.h"
+#include "xestiacalendar_testcommon.h"
#include <iostream>
#include <map>
TEST(CalDAV, BasicTests){
+ CalDAVConnectionData ConnPlain;
+ CalDAVConnectionData ConnNormal;
+ CalDAVConnectionData ConnInvalidSSL;
+ CalDAVConnectionData ConnTimeout;
+ ProcessConnectionDataFileResult DataFileResult;
+
bool ValidDataPlain = false;
bool ValidDataNormal = false;
- bool ValidDataFail = false;
+ bool ValidDataInvalidSSL = false;
bool ValidDataTimeout = false;
// Attempt to read the caldavtest-plain.auth file.
+
+ DataFileResult = ProcessConnectionDataFile("caldavtest-plain.auth", &ConnPlain);
+ if (DataFileResult == PROCESSCONNECTIONDATAFILE_OK){
+ ValidDataPlain = true;
+ }
+
+ // Attempt to read the caldavtest.auth file.
+
+ DataFileResult = ProcessConnectionDataFile("caldavtest.auth", &ConnNormal);
+ if (DataFileResult == PROCESSCONNECTIONDATAFILE_OK){
+ ValidDataNormal = true;
+ }
+
// Attempt to read the caldavtest-fail.auth file.
+
+ DataFileResult = ProcessConnectionDataFile("caldavtest-fail.auth", &ConnInvalidSSL);
+ if (DataFileResult == PROCESSCONNECTIONDATAFILE_OK){
+ ValidDataInvalidSSL = true;
+ }
+
// Attempt to read the caldavtest-timeout.auth file.
- // Attempt to read the caldavtest.auth file.
+
+ DataFileResult = ProcessConnectionDataFile("caldavtest-timeout.auth", &ConnTimeout);
+ if (DataFileResult == PROCESSCONNECTIONDATAFILE_OK){
+ ValidDataTimeout = true;
+ }
if (ValidDataPlain == false){
}
- if (ValidDataFail == false){
+ if (ValidDataInvalidSSL == false){
// Cannot read the caldavtest-fail.auth file properly.
ASSERT_EQ(true, ValidDataPlain);
ASSERT_EQ(true, ValidDataNormal);
- ASSERT_EQ(true, ValidDataFail);
+ ASSERT_EQ(true, ValidDataInvalidSSL);
ASSERT_EQ(true, ValidDataTimeout);
// (*nix version) Setup an initial connection (just plain
// text).
+ CalDAV CalDAVPlain;
+ CalDAVPlain.SetupConnectionData(&ConnPlain);
+
+ // Verify that the settings match with the CalDAVConnectionData
+ // passed.
+
+ CalDAVStatus CalDAVPlainStatus = CalDAVPlain.GetConnectionData();
+
+ ASSERT_EQ(CalDAVPlainStatus.Hostname, ConnPlain.Hostname);
+ ASSERT_EQ(CalDAVPlainStatus.Username, ConnPlain.Username);
+ ASSERT_EQ(CalDAVPlainStatus.Port, ConnPlain.Port);
+ ASSERT_EQ(CalDAVPlainStatus.Prefix, ConnPlain.Prefix);
+ ASSERT_EQ(CalDAVPlainStatus.UseSSL, ConnPlain.UseSSL);
+
// Verify that the connection was successful.
+ CalDAVServerResult ConnResult = CalDAVPlain.Connect();
+
+ ASSERT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(200, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Do another connection and this time the connection should
+ // fail due to being an invalid host name.
+
+ CalDAVConnectionData ConnPlainFail;
+ ConnPlainFail.Hostname = "server.invalid";
+ ConnPlainFail.Username = "fail";
+ ConnPlainFail.Password = "fail";
+ ConnPlainFail.Port = 80;
+ ConnPlainFail.UseSSL = false;
+
+ // Setup the CalDAV connection object.
+
+ CalDAV CalDAVPlainFail;
+ CalDAVPlainFail.SetupConnectionData(&ConnPlainFail);
+
+ // Setup the CalDAVStatus object.
+
+ CalDAVStatus CalDAVPlainFailStatus = CalDAVPlain.GetConnectionData();
+
+ // Connect and fail.
+
+ ConnResult = CalDAVPlainFail.Connect();
+
+ ASSERT_EQ(CALDAVQUERYRESULT_SERVERERROR, ConnResult.Result);
+ ASSERT_EQ(0, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_COULDNT_RESOLVE_HOST, ConnResult.Code);
+
// (*nix version) Setup an initial connection (with a valid
// SSL certificate).
+
+ CalDAV CalDAVNormal;
+ CalDAVNormal.SetupConnectionData(&ConnNormal);
+
+ // Verify that the settings match with the CalDAVConnectionData
+ // passed.
+ CalDAVStatus CalDAVNormalStatus = CalDAVNormal.GetConnectionData();
+
+ ASSERT_EQ(CalDAVNormalStatus.Hostname, ConnNormal.Hostname);
+ ASSERT_EQ(CalDAVNormalStatus.Username, ConnNormal.Username);
+ ASSERT_EQ(CalDAVNormalStatus.Port, ConnNormal.Port);
+ ASSERT_EQ(CalDAVNormalStatus.Prefix, ConnNormal.Prefix);
+ ASSERT_EQ(CalDAVNormalStatus.UseSSL, ConnNormal.UseSSL);
+
// Verify that the connection was successful (with a valid
// SSL certificate).
+ ConnResult = CalDAVNormal.Connect();
+
+ ASSERT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(200, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
// (*nix version) Setup an initial connection on a server that
// will fail due to having an invalid SSL certificate.
+ CalDAV CalDAVInvalidSSL;
+ CalDAVInvalidSSL.SetupConnectionData(&ConnInvalidSSL);
+
+ // Verify that the settings match with the CalDAVConnectionData
+ // passed.
+
+ CalDAVStatus CalDAVInvalidSSLStatus = CalDAVInvalidSSL.GetConnectionData();
+
+ ASSERT_EQ(CalDAVInvalidSSLStatus.Hostname, ConnInvalidSSL.Hostname);
+ ASSERT_EQ(CalDAVInvalidSSLStatus.Username, ConnInvalidSSL.Username);
+ ASSERT_EQ(CalDAVInvalidSSLStatus.Port, ConnInvalidSSL.Port);
+ ASSERT_EQ(CalDAVInvalidSSLStatus.Prefix, ConnInvalidSSL.Prefix);
+ ASSERT_EQ(CalDAVInvalidSSLStatus.UseSSL, ConnInvalidSSL.UseSSL);
+
// Verify that the connection had failed. (with an invalid
// SSL certificate).
+ ConnResult = CalDAVInvalidSSL.Connect();
+
+ ASSERT_EQ(CALDAVQUERYRESULT_SERVERERROR, ConnResult.Result);
+ ASSERT_EQ(0, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_SSL_CACERT, ConnResult.Code);
+
// (*nix version) Setup an inital connection on a server where
// a timeout occurs.
+ ConnTimeout.Timeout = 5;
+
+ CalDAV CalDAVTimeout;
+ CalDAVTimeout.SetupConnectionData(&ConnTimeout);
+
+ // Verify that the settings match with the CalDAVConnectionData
+ // passed.
+
+ CalDAVStatus CalDAVTimeoutStatus = CalDAVTimeout.GetConnectionData();
+
+ ASSERT_EQ(CalDAVTimeoutStatus.Hostname, ConnTimeout.Hostname);
+ ASSERT_EQ(CalDAVTimeoutStatus.Username, ConnTimeout.Username);
+ ASSERT_EQ(CalDAVTimeoutStatus.Port, ConnTimeout.Port);
+ ASSERT_EQ(CalDAVTimeoutStatus.Prefix, ConnTimeout.Prefix);
+ ASSERT_EQ(CalDAVTimeoutStatus.Timeout, ConnTimeout.Timeout);
+ ASSERT_EQ(CalDAVTimeoutStatus.UseSSL, ConnTimeout.UseSSL);
+
// Verify that the connection had timed out.
+ ConnResult = CalDAVTimeout.Connect();
+
+ ASSERT_EQ(CALDAVQUERYRESULT_SERVERERROR, ConnResult.Result);
+ ASSERT_EQ(0, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OPERATION_TIMEDOUT, ConnResult.Code);
+
+}
+
+TEST(CalDAV, BuildServerAddress){
+
+ CalDAVConnectionData ConnNormal;
+ ProcessConnectionDataFileResult DataFileResult;
+ bool ValidDataNormal = false;
+
+ // Attempt to read the caldavtest.auth file.
+
+ DataFileResult = ProcessConnectionDataFile("caldavtest.auth", &ConnNormal);
+ if (DataFileResult == PROCESSCONNECTIONDATAFILE_OK){
+ ValidDataNormal = true;
+ }
+
+ if (ValidDataNormal == false){
+
+ // Cannot read the caldavtest.auth file properly.
+
+ cout << "The caldavtest.auth file does not exist or is invalid!" << endl;
+ cout << "Please create the caldavtest.auth file using the following format:" << endl << endl;
+ cout << "server=localname" << endl;
+ cout << "port=8080" << endl;
+ cout << "user=username" << endl;
+ cout << "pass=password" << endl;
+ cout << "ssl=false" << endl;
+ cout << "prefix=/lalala/lookatme/thisisa/prefix" << endl << endl;
+
+ }
+
+ ASSERT_EQ(true, ValidDataNormal);
+
+ // Setup the server address to check.
+
+ string ServerAddress;
+
+ // Setup the server address.
+
+ if (ConnNormal.UseSSL == true){
+ ServerAddress += "https://";
+ } else {
+ ServerAddress += "http://";
+ }
+
+ ServerAddress += ConnNormal.Hostname;
+
+ // Check if server port is 80, otherwise
+ // specifiy the port number in the address.
+
+ if (ConnNormal.Port != 80){
+ ServerAddress += ":";
+ ServerAddress += to_string(ConnNormal.Port);
+ }
+
+ ServerAddress += "/principals/";
+
+ ASSERT_EQ(ServerAddress, BuildServerAddress(&ConnNormal, "/principals/"));
+
+}
+
+TEST(CalDAV, CalendarServerSupport){
+
+ CalDAVConnectionData ConnNormal;
+
+ bool ValidDataNormal = false;
+
+ // Attempt to read the caldavtest.auth file.
+
+ ProcessConnectionDataFileResult DataFileResult = ProcessConnectionDataFile("caldavtest.auth", &ConnNormal);
+ if (DataFileResult == PROCESSCONNECTIONDATAFILE_OK){
+ ValidDataNormal = true;
+ }
+
+ ASSERT_EQ(true, ValidDataNormal);
+
+ // Setup the connection.
+
+ CalDAV ServerConnection;
+
+ ServerConnection.SetupConnectionData(&ConnNormal);
+
+ // Verify the connection settings.
+
+ CalDAVStatus CalDAVStatus = ServerConnection.GetConnectionData();
+
+ ASSERT_EQ(CalDAVStatus.Hostname, ConnNormal.Hostname);
+ ASSERT_EQ(CalDAVStatus.Username, ConnNormal.Username);
+ ASSERT_EQ(CalDAVStatus.Port, ConnNormal.Port);
+ ASSERT_EQ(CalDAVStatus.Prefix, ConnNormal.Prefix);
+ ASSERT_EQ(CalDAVStatus.UseSSL, ConnNormal.UseSSL);
+
+ // Connect to the server.
+
+ CalDAVServerResult ConnResult = ServerConnection.Connect();
+
+ ASSERT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(200, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Check for basic support of the calendar server.
+
+ CalDAVServerSupport ConnSupport = ServerConnection.GetServerSupport();
+
+ ASSERT_EQ(true, ConnSupport.BasicSupport);
+
+}
+
+TEST(CalDAV, GetCalendarHome){
+
+ CalDAVConnectionData ConnNormal;
+
+ bool ValidDataNormal = false;
+
+ // Attempt to read the caldavtest.auth file.
+
+ ProcessConnectionDataFileResult DataFileResult = ProcessConnectionDataFile("caldavtest.auth", &ConnNormal);
+ if (DataFileResult == PROCESSCONNECTIONDATAFILE_OK){
+ ValidDataNormal = true;
+ }
+
+ ASSERT_EQ(true, ValidDataNormal);
+
+ // Setup the connection.
+
+ CalDAV ServerConnection;
+
+ ServerConnection.SetupConnectionData(&ConnNormal);
+
+ // Verify the connection settings.
+
+ CalDAVStatus CalDAVStatus = ServerConnection.GetConnectionData();
+
+ ASSERT_EQ(CalDAVStatus.Hostname, ConnNormal.Hostname);
+ ASSERT_EQ(CalDAVStatus.Username, ConnNormal.Username);
+ ASSERT_EQ(CalDAVStatus.Port, ConnNormal.Port);
+ ASSERT_EQ(CalDAVStatus.Prefix, ConnNormal.Prefix);
+ ASSERT_EQ(CalDAVStatus.UseSSL, ConnNormal.UseSSL);
+
+ // Connect to the server.
+
+ CalDAVServerResult ConnResult = ServerConnection.Connect();
+
+ ASSERT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(200, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Check for basic support of the calendar server.
+
+ CalDAVServerSupport ConnSupport = ServerConnection.GetServerSupport();
+
+ ASSERT_EQ(true, ConnSupport.BasicSupport);
+
+ // Get the user principal.
+
+ string CurrentUserPrincipal = ServerConnection.GetUserPrincipal();
+
+ // Check the response from the server.
+
+ ConnResult = ServerConnection.GetServerResult();
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(207, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Get the calendar home.
+
+ string CalendarHome = ServerConnection.GetCalendarHome(CurrentUserPrincipal);
+
+ // Check the response from the server.
+
+ ConnResult = ServerConnection.GetServerResult();
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(207, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+}
+
+TEST(CalDAV, ListCalendars){
+
+ CalDAVConnectionData ConnNormal;
+ string CurrentUserPrincipal;
+
+ bool ValidDataNormal = false;
+
+ // Attempt to read the caldavtest.auth file.
+
+ ProcessConnectionDataFileResult DataFileResult = ProcessConnectionDataFile("caldavtest.auth", &ConnNormal);
+ if (DataFileResult == PROCESSCONNECTIONDATAFILE_OK){
+ ValidDataNormal = true;
+ }
+
+ ASSERT_EQ(true, ValidDataNormal);
+
+ // Setup the connection.
+
+ CalDAV ServerConnection;
+
+ ServerConnection.SetupConnectionData(&ConnNormal);
+
+ // Verify the connection settings.
+
+ CalDAVStatus CalDAVStatus = ServerConnection.GetConnectionData();
+
+ ASSERT_EQ(CalDAVStatus.Hostname, ConnNormal.Hostname);
+ ASSERT_EQ(CalDAVStatus.Username, ConnNormal.Username);
+ ASSERT_EQ(CalDAVStatus.Port, ConnNormal.Port);
+ ASSERT_EQ(CalDAVStatus.Prefix, ConnNormal.Prefix);
+ ASSERT_EQ(CalDAVStatus.UseSSL, ConnNormal.UseSSL);
+
+ // Connect to the server.
+
+ CalDAVServerResult ConnResult = ServerConnection.Connect();
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(200, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Check that the server supports CalDAV.
+
+ CalDAVServerSupport ConnSupport = ServerConnection.GetServerSupport();
+ ConnResult = ServerConnection.GetServerResult();
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(200, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+ ASSERT_EQ(true, ConnSupport.BasicSupport);
+
+ // Get the list of calendars.
+
+ CalDAVCalendarList CalendarList = ServerConnection.GetCalendars();
+
+ // Check the response result from the server.
+
+ ConnResult = ServerConnection.GetServerResult();
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(200, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Get the user principal.
+
+ CurrentUserPrincipal = ServerConnection.GetUserPrincipal();
+
+ // Check the response from the server.
+
+ ConnResult = ServerConnection.GetServerResult();
+
+ EXPECT_EQ(CALDAVQUERYRESULT_OK, ConnResult.Result);
+ ASSERT_EQ(207, ConnResult.HTTPCode);
+ ASSERT_EQ(CURLE_OK, ConnResult.Code);
+
+ // Get the list of calendars.
+
+
+
+
+
}
\ No newline at end of file