Merge test folder of test branch
[iotivity.git] / test / test_manager / junit_runner.py
1 #!/usr/bin/python
2 '''
3 /******************************************************************
4 *
5 * Copyright 2018 Samsung Electronics All Rights Reserved.
6 *
7 *
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 *
21 ******************************************************************/
22 '''
23
24 import sys
25 import os
26 from os import listdir
27 from os.path import isfile, join
28 import re
29 import optparse
30 from configuration import *
31 import datetime as dt
32 from time import time
33 import subprocess
34 import glob
35
36 oparser = optparse.OptionParser()
37 oparser.add_option("-m", action="store", dest="module_name")
38 oparser.add_option("--module", action="store", dest="module_name")
39 oparser.add_option("-k", action="store", dest="type_name")
40 oparser.add_option("--kind", action="store", dest="type_name")
41 oparser.add_option("-p", action="store", dest="platform")
42 oparser.add_option("--platform", action="store", dest="platform")
43 oparser.add_option("-t", action="store", dest="target")
44 oparser.add_option("--target", action="store", dest="target")
45 oparser.add_option("-s", action="store", dest="suite")
46 oparser.add_option("--suite", action="store", dest="suite")
47 oparser.add_option("-c", action="store", dest="testcase")
48 oparser.add_option("--case", action="store", dest="testcase")
49 oparser.add_option("-d", action="store", dest="device_name")
50 oparser.add_option("--device", action="store", dest="device_name")
51 oparser.add_option("-r", action="store", dest="is_marge")
52 oparser.add_option("--merge", action="store", dest="is_marge")
53 oparser.add_option("-b", action="store", dest="build_target")
54 oparser.add_option("--buildtarget", action="store", dest="build_target")
55 oparser.set_defaults(platform='android', target='21', build_target='target')
56 opts, args = oparser.parse_args()
57
58 platform = opts.platform
59 target = opts.target
60 module_name = opts.module_name
61 type_name = opts.type_name
62 suite_name = opts.suite
63 testcase_name = opts.testcase
64 device_name = opts.device_name
65 build_target_dir = opts.build_target
66 is_marge = opts.is_marge
67 EXECUTABLE_DIRECTORY = ""
68 suites = []
69 tc_count = 0
70 if module_name == 'ic' :
71     EXECUTABLE_DIRECTORY = 'bin/android/%s/intermediates/classes/debug/org/iotivity/cloud/%s/test/%s' % (module_name,  module_name,
72 type_name)
73     base_package = "org.iotivity.cloud."
74 else :
75     EXECUTABLE_DIRECTORY = 'bin/android/%s/intermediates/classes/debug/org/iotivity/service/%s/test/%s' % (module_name,  module_name,
76 type_name)
77     base_package = "org.iotivity.service."
78
79 if build_target_dir == 'sec':
80     EXECUTABLE_ROOT_DIR = '../IotivitySECTest_New/'
81 else :
82     EXECUTABLE_ROOT_DIR = "../"
83
84 build_dir = EXECUTABLE_ROOT_DIR+EXECUTABLE_DIRECTORY
85
86 TEST_RESULT_DIR_ANDROID = TEST_RESULT_DIR + "/android/"+module_name+"/"+type_name
87 LOG_DIRECTORY = TEST_RESULT_DIR + "/android/"+module_name+"/"+"log"+"/"+type_name
88 date = dt.datetime.today().strftime("%Y%m%d")
89 time_stamp = str(time())
90 result_file_name = platform+"_"+target+"_"+date+"_"+time_stamp+"_iotivity_"+module_name+"_"+type_name+".xml"
91
92 package_name = base_package+module_name+".test"
93
94 print "Build Directory "+build_dir
95
96 full_suite_name= package_name+".%s.%s"%(type_name, suite_name)
97 savedPath = os.getcwd()
98
99 if device_name == None:
100     device_name = ""
101 else:
102     device_name = "-s " + device_name
103 #adb shell pm list instrumentation
104
105 def add_suites_to_list() :
106     global suites
107     suites = []
108     if suite_name is not None and testcase_name is None:
109         suites = opts.suite.split(',')
110     elif suite_name is None and testcase_name is None:
111         temp_suites = [f for f in listdir(build_dir) if isfile(join(build_dir, f))]
112         for suite in temp_suites :
113             if "$" not in suite :
114                 suite = suite.split('.',1)[0]
115                 suites.append(suite)
116         print "\nSuites List going to execute : \n"
117         print suites
118     elif suite_name is not None and testcase_name is not None :
119         suites.append(suite_name)
120
121 def clean_test_result_directory(directory) :
122     if not os.path.exists(directory):
123         os.makedirs(directory)
124     else:
125         if is_marge is None:
126             files = glob.glob('%s/*'%(directory))
127             for xml_file in files:
128                 os.remove(xml_file)
129
130 def write_log_into_file(tc_name) :
131     rc = os.system("adb %s logcat -d > %s_log.txt" %(device_name, LOG_DIRECTORY+tc_name))
132     os.chdir(savedPath)
133
134 def pull_result_file_from_device(result_file_name) :
135      os.system("adb %s pull /data/data/%s%s.test/files/junit-report.xml %s" %(device_name, base_package, module_name, TEST_RESULT_DIR_ANDROID))
136      os.chdir(TEST_RESULT_DIR_ANDROID)
137      os.rename("junit-report.xml", result_file_name)
138      os.chdir(savedPath)
139
140 def run_module() :
141     global tc_count
142
143     #add suites as requested
144     add_suites_to_list()
145
146     #getting suites fro suites list
147     for suite in  suites:
148
149         #change directory to build directory
150         os.chdir(build_dir)
151         testcases = []
152         full_suite_name= package_name+".%s.%s"%(type_name, suite)
153         print("Full suite name : "+full_suite_name)
154         #checking if suite exist in build directory
155         if os.path.isfile(suite+".class") :
156             rc = os.system("find -name '%s.class' | xargs javap -p > %s.txt " % (suite,suite))
157             classFile = open("%s.txt" % suite, "r")
158             if rc != 0 :
159                 continue
160         else :
161              print "Suite : " +suite +" does not exist -----> Moving to next Suite"
162              continue
163         print "\nStart Running Suite : "+suite
164
165         #Getting testcase list from suite
166         for line in classFile:
167             words = line.split()
168             for word in  words:
169                 if word.startswith('Test') or word.startswith('test'):
170                     testname = word.split('(')
171                     testcases.append(testname[0])
172
173         #close test suite class file
174         classFile.close()
175
176         #delete temp txt file
177         if os.path.isfile(suite+".txt") :
178             os.remove(suite+".txt")
179
180         #this if block is for single test execution
181         if testcase_name is not None :
182             if  testcase_name in testcases :
183                 testcases = []
184                 testcases.append(testcase_name)
185             else :
186                 print "TestCase : "+testcase_name +" does not exist------->ending test"
187                 system.exit(0)
188
189         #getting testcase from testcase list and execute
190         for method_name in testcases:
191             print  "\nStarted Test : " +method_name
192             p = subprocess.Popen(["adb %s shell am instrument -w  -e class  %s#%s %s/com.zutubi.android.junitreport.JUnitReportTestRunner"%(device_name,full_suite_name,method_name,package_name)], stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
193             out, err = p.communicate()
194             print out
195             print err
196             tc_count = tc_count+1;
197             print  "Completed Test : " +method_name+"\n"
198             time_stamp = str(time())
199             result_file_name = method_name+"-"+suite +"-"+platform+"-"+target+"-"+date+"-"+time_stamp+"-iotivity-"+module_name+"-"+type_name+".xml"
200             os.chdir(savedPath)
201             write_log_into_file(method_name)
202             os.chdir(savedPath)
203             #Pulling testcase xml result file from device
204             pull_result_file_from_device(result_file_name)
205             print "Completed Running Suite : "+suite
206
207 def make_excel_report() :
208     subprocess.call("python junit_reporter.py -m %s"%(module_name), shell=True)
209
210 if __name__ == '__main__':
211     clean_test_result_directory(TEST_RESULT_DIR_ANDROID)
212     clean_test_result_directory(LOG_DIRECTORY)
213     run_module()
214     print "\nTotal TC Count : ",tc_count
215     print "\n=============== Test Execution Completed ===============\n"
216     make_excel_report()
217
218 '''
219 #adb shell am instrument -w org.iotivity.service.phy.test/com.zutubi.android.junitreport.JUnitReportTestRunner
220 #Script running procedure
221 #python ./junit_runner.py -m phy -k stc -p android -t 21 -s PHYWiFiOnBoardingConfigTest -c testSetSharedKeyAndGetSharedKeyByGetConfig_GSRV_P
222 #./junit_runner.py -m pm -k itc -p android -t 21 -s PMOcProvisioningTest
223 #./junit_runner.py -m re -k utc -p android -t 21 -s REResourceBrokerTest
224 #./junit_runner.py -m rh -k utc -p android -t 21 -s ResourceHostingTest
225 #./junit_runner.py -m tm -k itc -p android -t 21 -s TMManagerTest
226 #/home/sk/gittest/oictest_repo/IotivityOrgSource/new/iotivity/IotivitySECTest/bin/android/phy -s PHYWiFiOnBoardingConfigTest -c TestSetSharedKeyAndGetSharedKeyByGetConfig_GSRV_P
227
228 #./junit_runner.py -m es -k btc -p android -t 21 -b target -s ESDevicePropTest -c testESSetWiFiPropWithInvalidArguments_ESV_NV_ETC_N
229 '''
230
231