[NUI] Rebase develnui (DevelNUI only patches --> master) (#3910)
[platform/core/csapi/tizenfx.git] / test / Tizen.NUI.Devel.Tests.Ubuntu / nunit.framework / TUnit / TSettings.cs
1 // ****************************************************************************************************
2 // Namespace:       NUnit.Framework.TUnit
3 // Class:           TSettings
4 // Description:     Tizen UnitTest Settings
5 // Author:          Nguyen Truong Duong <duong.nt1@samsung.com>
6 // Notes:          
7 // Revision History:
8 // Name:           Date:        Description:
9 // ****************************************************************************************************
10 #define PORTABLE
11 #define TIZEN
12 #define NUNIT_FRAMEWORK
13 #define NUNITLITE
14 #define NET_4_5
15 #define PARALLEL
16 using System;
17 using System.Collections.Generic;
18 using System.Threading.Tasks;
19 using System.Net;
20 using System.IO;
21 using System.Text;
22
23 namespace NUnit.Framework.TUnit
24 {
25     public class TSettings
26     {
27         private static int DefaultTCDelay = 50; // Default time delay for each test case execution (millisecond) to reduce CPU consumption
28         private static string OutputFilePathName = ""; // XML Result File Path Name
29         public static long CurTCIndex = 0; // HACKING: Curent TC Index
30
31         private static TSettings _instance;
32         private static object lockObject = new object();
33
34         public static TSettings GetInstance()
35         {
36             lock (lockObject)
37             {
38                 if (_instance == null)
39                 {
40                     _instance = new TSettings();
41                 }
42             }
43             return _instance;
44         }
45
46         private TSettings()
47         {
48             IsManual = false;
49         }
50
51         public void SetDefaultTCDelay(int defaultTCDelay)
52         {
53             DefaultTCDelay = defaultTCDelay;
54         }
55
56         public int GetDefaultTCDelay()
57         {
58             return DefaultTCDelay;
59         }
60
61         public void SetOutputFilePathName(string outputFilePathName)
62         {
63             OutputFilePathName = outputFilePathName;
64         }
65
66         public string GetOutputFilePathName()
67         {
68             return OutputFilePathName;
69         }
70
71         #region testkit-stub api
72         // [Hyukin.Kwon-code]: session_id for communication with testkit-stub
73         private static bool _isSlaveMode = false;
74         private static int _session_id;
75         private static string _server = "http://127.0.0.1:8000";
76         // private static string _proxy = "http://10.112.1.184:8080/";
77
78         public static bool IsLastTC = false;
79         private static string _testcase_id;
80
81         public void ConnectTestkitStub()
82         {
83             TLogger.Write("############### ConnectTestkitStub ###############");
84             Random rnd = new Random();
85             _session_id = rnd.Next(1000, 9999);
86             _server = "http://127.0.0.1:8000";
87             _isSlaveMode = SyncSessionIdRequest();
88             Console.WriteLine("[TUnitTest] - " + "IsSlaveMode : " + _isSlaveMode);
89         }
90
91         private bool SyncSessionIdRequest()
92         {
93             TLogger.Write("############### In SyncSessionIdRequest ###############");
94             Console.WriteLine("[TUnitTest] - " + "In SyncSessionIdRequest");
95
96             string result = RequestGET("init_session_id", _session_id);
97
98             if (result == null)
99                 return false;
100
101             CheckServer();
102
103             //string[] jobj = ResultParser (result);
104             //if (jobj [1] == "OK" && jobj [2] == "1")
105             //  return true;
106
107             Dictionary<string, string> dic = parseJson(result);
108
109             if (dic["OK"].Equals("1"))
110                 return true;
111             else
112                 return false;
113         }
114
115         private bool CheckServer()
116         {
117             TLogger.Write("############### In CheckServer ###############");
118             Console.WriteLine("[TUnitTest] - " + "In CheckServer");
119             string result = RequestGET("check_server");
120
121             if (result == null)
122                 return false;
123
124             string[] jobj = ResultParser(result);
125             if (jobj != null)
126                 return true;
127             else
128                 return false;
129         }
130
131         private string RequestGET(string key)
132         {
133             TLogger.Write("############### In RequestGET ###############");
134             Console.WriteLine("[TUnitTest] - " + "In RequestGET");
135
136             string result = null;
137             string url = _server + "/" + key;
138
139             Console.WriteLine("[TUnitTest] - " + "RequestGET url : " + url);
140             TLogger.Write("############### RequestGET url ###############");
141
142             try
143             {
144                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
145
146                 //Reference
147                 // https://msdn.microsoft.com/en-us/library/czdt10d3(v=vs.110).aspx
148
149                 WebProxy proxyObject = new WebProxy(_server, true);
150                 request.Proxy = proxyObject;
151
152
153                 IWebProxy proxy = request.Proxy;
154
155                 if (proxy != null)
156                 {
157                     Console.WriteLine("[TUnitTest] - Proxy is NOT null. Is ByPassed : " + proxy.IsBypassed(new Uri(url)));
158                 }
159                 else
160                 {
161                     Console.WriteLine("[TUnitTest] - " + "Proxy is null; no proxy will be used");
162                 }
163
164                 Task<WebResponse> res = request.GetResponseAsync();
165                 res.Wait();
166                 WebResponse response = res.Result;
167                 Stream stream = response.GetResponseStream();
168                 StreamReader reader = new StreamReader(stream);
169                 result = reader.ReadToEnd();
170                 Console.WriteLine("[TUnitTest] - " + "RequestGET Result : " + result);
171                 TLogger.Write("############### RequestGET Result : " + result + " ###############");
172                 stream.Dispose();
173                 response.Dispose();
174             }
175             catch (Exception e)
176             {
177                 Console.WriteLine("[TUnitTest] - " + "RequestGET error : " + e.ToString());
178             }
179
180             return result;
181         }
182
183         private string RequestGET(string key, int sessionId)
184         {
185             TLogger.Write("############### In RequestGET ###############");
186             Console.WriteLine("[TUnitTest] - " + "In RequestGET");
187
188             string result = null;
189             string url = _server + "/" + key + "?session_id=" + _session_id;
190
191             Console.WriteLine("[TUnitTest] - " + "RequestGET url : " + url);
192             TLogger.Write("############### RequestGET url : " + url + " ###############");
193
194             try
195             {
196                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
197
198                 //Reference
199                 // https://msdn.microsoft.com/en-us/library/czdt10d3(v=vs.110).aspx
200
201                 WebProxy proxyObject = new WebProxy(_server, true);
202                 request.Proxy = proxyObject;
203
204
205                 IWebProxy proxy = request.Proxy;
206
207                 if (proxy != null)
208                 {
209                     Console.WriteLine("[TUnitTest] - Proxy is NOT null. Is ByPassed : " + proxy.IsBypassed(new Uri(url)));
210                 }
211                 else
212                 {
213                     Console.WriteLine("[TUnitTest] - " + "Proxy is null; no proxy will be used");
214                 }
215
216                 Task<WebResponse> res = request.GetResponseAsync();
217                 res.Wait();
218                 WebResponse response = res.Result;
219                 Stream stream = response.GetResponseStream();
220                 StreamReader reader = new StreamReader(stream);
221                 result = reader.ReadToEnd();
222                 Console.WriteLine("[TUnitTest] - " + "RequestGET Result: " + result);
223                 stream.Dispose();
224                 response.Dispose();
225             }
226             catch (Exception e)
227             {
228                 Console.WriteLine("[TUnitTest] - " + "RequestGET error : " + e.Message);
229             }
230             return result;
231         }
232
233         private string[] ResultParser(string TCID)
234         {
235             string[] delimiter = { "{\"", "\":\"", "\":", ",\"", "\"}", "}" };
236             string[] stringPieces = null;
237
238             try
239             {
240                 stringPieces = TCID.Split(delimiter, StringSplitOptions.None);
241             }
242             catch (Exception e)
243             {
244                 Console.WriteLine("[TUnitTest] - " + "ResultParser : " + e.Message);
245             }
246
247             return stringPieces;
248         }
249
250         public Dictionary<string, string> parseJson(string jsonString)
251         {
252             Dictionary<string, string> jsonDic = new Dictionary<string, string>();
253             jsonString = jsonString.Replace("\n", "");
254             jsonString = jsonString.Replace("{", "");
255             jsonString = jsonString.Replace("}", "");
256
257             string[] ary = jsonString.Split(',');
258
259             foreach (string item in ary)
260             {
261                 if (!item.Equals(""))
262                 {
263                     string[] keyValue = item.Split(':');
264                     keyValue[0] = keyValue[0].Replace(" ", "");
265                     keyValue[0] = keyValue[0].Replace("\"", "");
266
267                     // 처음 공백 제거
268                     while (keyValue[1].StartsWith(" "))
269                         keyValue[1] = keyValue[1].Substring(1);
270                     // 마지막 공백 제거
271                     while (keyValue[1].EndsWith(" "))
272                         keyValue[1] = keyValue[1].Substring(0, keyValue[1].Length - 2);
273
274                     keyValue[1] = keyValue[1].Replace("\"", "");
275
276                     Console.Write(" key : " + keyValue[0] + ", value : " + keyValue[1] + "\n");
277                     jsonDic.Add(keyValue[0], keyValue[1].Replace("\"", ""));
278                 }
279             }
280
281             return jsonDic;
282         }
283
284         public bool CheckExecutionProgressRequest()
285         {
286             Console.WriteLine("[TUnitTest] - " + "In CheckExecutionProgressRequest");
287
288             string result = RequestGET("check_execution_progress", _session_id);
289
290             if (result == null)
291                 return false;
292
293             string[] jobj = ResultParser(result);
294             if (jobj != null)
295                 return true;
296             else
297                 return false;
298         }
299
300         public bool AskNextStepRequest()
301         {
302             Console.WriteLine("[TUnitTest] - " + "In AskNextStepRequest");
303
304             string result = RequestGET("ask_next_step", _session_id);
305             TLogger.Write("############### In AskNextStepRequest ###############");
306
307             if (result == null)
308                 return false;
309
310             Dictionary<string, string> dic = parseJson(result);
311
312             if (dic == null)
313                 return false;
314
315             if (dic["step"].Equals("continue"))
316                 return true;
317             else
318                 return false;
319         }
320
321         public List<string> ManualTestTaskRequest()
322         {
323             List<string> list = new List<string>();
324             string result = RequestGET("manual_cases", _session_id);
325             if (result == null)
326                 return list;
327
328             result = result.Replace("[", "");
329             result = result.Replace("]", "");
330             result = result.Replace("\n", "");
331             result = result.Replace("{", "");
332             result = result.Replace("}", "");
333             result = result.Replace(" ", "");
334
335             string[] arr = result.Split(',');
336
337             foreach (string item in arr)
338             {
339                 if (!item.Equals("") && item.Contains("case_id"))
340                 {
341                     string tmp = item.Replace("\"", "");
342                     string[] keyValue = tmp.Split(':');
343                     list.Add(keyValue[1]);
344                 }
345             }
346
347             return list;
348         }
349
350         public string AutoTestTaskRequest()
351         {
352             Console.WriteLine("[TUnitTest] - " + "In AutoTestTaskRequest");
353
354             string result = RequestGET("auto_test_task", _session_id);
355             TLogger.Write("############### In AutoTestTaskRequest ###############");
356             TLogger.Write("");
357             TLogger.Write("");
358             TLogger.Write("");
359
360             if (result == null)
361                 return "";
362
363             Dictionary<string, string> dic = parseJson(result);
364
365             if (dic == null)
366                 return "";
367
368             if (dic.ContainsKey("none"))
369                 IsLastTC = true;
370
371             try
372             {
373                 Console.WriteLine("[TUnitTest] - " + "TC name received:[" + dic["case_id"] + "]");
374             }
375             catch (Exception e)
376             {
377                 Console.WriteLine("[TUnitTest] - " + "Json parsing Error : " + e.Message);
378                 return "";
379             }
380
381             return dic["case_id"];
382
383         }
384         public string RequestPOST(string key, string json)
385         {
386             Console.WriteLine("[TUnitTest] - " + "In RequestPOST");
387             string result = null;
388             TLogger.Write("############### In RequestPOST ###############");
389             string url = _server + "/" + key;
390             json = json + "&session_id=" + _session_id;
391
392             Console.WriteLine("[TUnitTest] - " + "RequestPOST url :" + url);
393
394             try
395             {
396                 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // WebRequest 객체 형성 및 HttpWebRequest 로 형변환
397
398
399                 //Reference
400                 // https://msdn.microsoft.com/en-us/library/czdt10d3(v=vs.110).aspx
401
402                 WebProxy proxyObject = new WebProxy(_server, true);
403                 request.Proxy = proxyObject;
404
405
406                 IWebProxy proxy = request.Proxy;
407
408                 if (proxy != null)
409                 {
410                     Console.WriteLine("[TUnitTest] - Proxy is NOT null. Is ByPassed : " + proxy.IsBypassed(new Uri(url)));
411                 }
412                 else
413                 {
414                     Console.WriteLine("[TUnitTest] - " + "Proxy is null; no proxy will be used");
415                 }
416
417                 request.Method = "POST"; // 전송 방법 "GET" or "POST"
418                 request.ContentType = "application/json";
419
420                 byte[] byteArray = Encoding.UTF8.GetBytes(json);
421
422                 Task<Stream> dataAsync = request.GetRequestStreamAsync();
423                 dataAsync.Wait();
424                 Stream dataStream = dataAsync.Result;
425                 dataStream.Write(byteArray, 0, byteArray.Length);
426                 dataStream.Dispose();
427
428                 Task<WebResponse> resAsync = request.GetResponseAsync();
429                 resAsync.Wait();
430
431                 WebResponse response = resAsync.Result;
432
433                 Stream respPostStream = response.GetResponseStream();
434                 StreamReader reader = new StreamReader(respPostStream);
435                 result = reader.ReadToEnd();
436
437                 Console.WriteLine("[TUnitTest] - " + "###############Asavin############### RequestPOST Result :" + result);
438                 reader.Dispose();
439
440                 return result;
441             }
442             catch (Exception e)
443             {
444                 Console.WriteLine("[TUnitTest] - " + "RequestPOST ERROR :" + e.Message);
445             }
446             return result;
447         }
448
449         public void SubmitManualResult()
450         {
451             TLogger.Write("############### SubmitManualResult ###############");
452             LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Manual test execution done.");
453
454             if (_isSlaveMode == true)
455             {
456                 LogUtils.Write(LogUtils.DEBUG, LogUtils.TAG, "Submit result to inform manual execution done.");
457                 RequestGET("generate_xml");
458             }
459         }
460
461 #if TIZEN
462         public List<string> GetNotPassListManual()
463         {
464             List<string> list = new List<string>();
465             LogUtils.Write(LogUtils.INFO, LogUtils.TAG, "############### GetNotPassListManual ###############");
466             if (AskNextStepRequest())
467             {
468                 CheckExecutionProgressRequest();
469                 list = ManualTestTaskRequest();
470             }
471             return list;
472         }
473
474         public void NextStepRequest()
475         {
476             TLogger.Write("############### NextStepRequest ###############");
477             if (AskNextStepRequest())
478             {
479                 CheckExecutionProgressRequest();
480             }
481             if (AskNextStepRequest())
482             {
483                 Testcase_ID = AutoTestTaskRequest();
484             }
485         }
486
487         public SingleTestDoneEventArgs GetSingleTestDoneEventArgs()
488         {
489             SingleTestDoneEventArgs singleTestArgs = new SingleTestDoneEventArgs();
490             singleTestArgs.Name = Testcase_ID;
491             singleTestArgs.Result = TCResult;
492             singleTestArgs.Message = TCMessage;
493             return singleTestArgs;
494         }
495
496         public bool IsSlaveMode
497         {
498             get { return _isSlaveMode; }
499         }
500
501         public bool IsManual
502         {
503             get;
504             set;
505         }
506
507         public string Testcase_ID
508         {
509             get { return _testcase_id; }
510             set { _testcase_id = value; }
511         }
512
513
514         public string TCResult
515         {
516             get;
517             set;
518         }
519
520         public string TCMessage
521         {
522             get;
523             set;
524         }
525
526 #endif
527
528         #endregion
529     }
530
531
532     public class SingleTestDoneEventArgs : EventArgs
533     {
534         public string Name { get; set; }
535         public string Result { get; set; }
536         public string Message { get; set; }
537     }
538 }