Merge test folder of test branch
[iotivity.git] / test / src / testapp / ic / iotivity_ic_server.cpp
1 /******************************************************************
2  *
3  * Copyright 2017 Samsung Electronics All Rights Reserved.
4  *
5  *
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  *
20  ******************************************************************/
21
22 #include <stddef.h>
23 #include <string>
24
25 #include "logger.h"
26 #include "ocpayload.h"
27 #include "ocstack.h"
28 #include "oic_malloc.h"
29 #include "oic_string.h"
30 #include "OCAccountManager.h"
31 #include "OCApi.h"
32 #include "OCPlatform.h"
33 #include "OCPlatform_impl.h"
34 #include "payload_logging.h"
35 #include "rd_client.h"
36
37 #ifdef __SECURED__
38 #include "cathreadpool.h"
39 #include "utlist.h"
40 #include "casecurityinterface.h"
41 #include "occloudprovisioning.h"
42 #include "ocprovisioningmanager.h"
43 #include "securevirtualresourcetypes.h"
44 #include "srmutility.h"
45 #include "ssl_ciphersuites.h"
46 #include "utils.h"
47 #include "pmtypes.h"
48 #include "oxmjustworks.h"
49 #include "oxmrandompin.h"
50 #include "ca_adapter_net_ssl.h"
51 #include "CAManager.h"
52 #endif
53
54 #include "CommonUtil.h"
55 #include "Configuration.h"
56 #include "CloudCommonUtil.h"
57 #include "CommonProperties.h"
58 #include "IotivityTest_Logger.h"
59
60 using namespace std;
61 using namespace OC;
62
63 #define ROOT_CERT "rootca.crt"
64 const char* CLOUD_SVR_CBOR_DAT = "cloud.dat";
65 static OCPersistentStorage s_pstStr;
66 static string g_hostAddress = "";
67 static OCAccountManager::Ptr g_accountMgr = nullptr;
68
69 FILE* controllerOpen(const char *path, const char *mode)
70 {
71     if (0 == strncmp(path, OC_SECURITY_DB_DAT_FILE_NAME, strlen(OC_SECURITY_DB_DAT_FILE_NAME)))
72     {
73         return fopen(path, mode);
74     }
75     else
76     {
77         return fopen(CLOUD_SVR_CBOR_DAT, mode);
78     }
79 }
80
81 void initServer()
82 {
83     __FUNC_IN__
84
85     s_pstStr.open = controllerOpen;
86     s_pstStr.read = fread;
87     s_pstStr.write = fwrite;
88     s_pstStr.close = fclose;
89     s_pstStr.unlink = unlink;
90
91     if (OC_STACK_OK != OCRegisterPersistentStorageHandler(&s_pstStr))
92     {
93         IOTIVITYTEST_LOG(ERROR, "[IC Server] OCRegisterPersistentStorageHandler error");
94         return;
95     }
96
97     // initialize OC stack and provisioning manager
98     if (OC_STACK_OK != OCInit(NULL, 0, OC_CLIENT_SERVER))
99     {
100         IOTIVITYTEST_LOG(ERROR, "[IC Server] OCStack init error");
101         return;
102     }
103
104     IOTIVITYTEST_LOG(INFO, "[IC Server] Host Address : %s", g_hostAddress.c_str());
105
106     g_accountMgr = OCPlatform::constructAccountManagerObject(g_hostAddress, CT_ADAPTER_TCP);
107     __FUNC_OUT__
108 }
109
110 /**
111  * @pre_condition   1. Start Kafka Server
112  *                  2. Start ZooKeeper Server
113  *                  3. Start Mongo DB Server
114  *                  4. Start RD, MQ, Account and CI Server respectively
115  * @procedure       1. Call OCRegisterPersistentStorageHandler
116  *                  2. Call OCInit
117  *                  6. Call signUp and save uid and accessToken in cloud.properties file
118  *                  7. Call signIn using uid and accessToken
119  *                  10. Call signOut
120  * @post_condition  None
121  * @expected        Cloud Initialization Successful.
122  */
123 int main()
124 {
125     bool isInitialized = true;
126 #ifdef __SECURED__
127     IOTIVITYTEST_LOG(INFO, "[IC Server] SECURED MODE : On");
128 #else
129     IOTIVITYTEST_LOG(INFO, "[IC Server] SECURED MODE : Off");
130 #endif
131
132 #ifdef __TLS_ON__
133     IOTIVITYTEST_LOG(INFO, "TLS MODE : On");
134 #else
135     IOTIVITYTEST_LOG(INFO, "TLS MODE : Off");
136 #endif
137
138     g_hostAddress = CloudCommonUtil::getDefaultHostAddess();
139
140     initServer();
141
142     isInitialized = CloudCommonUtil::signUp(g_accountMgr);
143
144     if (isInitialized)
145     {
146         isInitialized = CloudCommonUtil::signIn(g_accountMgr);
147
148         if (isInitialized)
149         {
150             CloudCommonUtil::signOut(g_accountMgr);
151         }
152     }
153
154     IOTIVITYTEST_LOG(INFO, "Cloud Initialization %s", isInitialized ? "Successful" : "Failed");
155     return 0;
156 }