class TestNuSMV: @classmethod def setup_class(clazz): pass @classmethod def teardown_class(clazz): pass # このクラスの各テストケースを実行する前に実行する def setup(self): self.nu = NuSMV() # self.sw_a = Switch('sw001', [1]) # self.sw_b = Switch('sw002', [2]) self.tf = TF('sw001') self.rules = [] self.rules.append( {'in_ports' : [1]} ) self.rules.append( {'in_ports' : [2, 3]} ) self.rules[0]['out_ports'] = [1] self.rules[1]['out_ports'] = [2, 3] self.tf.rules = self.rules self.tf.end_ports = [10, 11] # このクラスの各テストケースを実行した後に実行する def teardown(self): # 好きなことをする pass def test_clear_data(self): self.nu.clear_data() assert self.nu.nusmv_trans == [] assert self.nu.generated_nusmv_input == "" def test_input_rules(self): # assert len(self.nu.rules) == 2 # assert rule[0]['in_port'] == 2 # assert rule[1]['in_port'] == 3 # assert rule[0]['out_port'] == 3 # assert rule[1]['out_port'] == 2 pass def test_generate_nusmv_model(self): answer = ['(p = sw001_1) & (next(p) = sw001_1)'] answer.append('(p = sw001_2 | p = sw001_3) & (next(p) = sw001_2 | next(p) = sw001_3)') answer.append('p = sw001_10 & next(p) = sw001_10') answer.append('p = sw001_11 & next(p) = sw001_11') # answer.append('p = sw001_0 & next(p) = sw001_0') self.nu.generate_nusmv_model(self.tf) assert self.nu.nusmv_trans == answer def test_gen_model_by_in_port_rule(self): answer1 = '(p = sw001_1)' answer2 = '(p = sw001_2 | p = sw001_3)' test_model_str = self.nu._gen_model_by_in_port_rule(self.tf.name, self.rules[0]['in_ports'] ) assert test_model_str == answer1 test_model_str = self.nu._gen_model_by_in_port_rule(self.tf.name, self.rules[1]['in_ports'] ) assert test_model_str == answer2 def test_gen_model_by_out_port_rule(self): answer1 = ' & (next(p) = sw001_1)' answer2 = ' & (next(p) = sw001_2 | next(p) = sw001_3)' test_model_str = self.nu._gen_model_by_out_port_rule(self.tf.name, self.rules[0]['out_ports'] ) assert test_model_str == answer1 test_model_str = self.nu._gen_model_by_out_port_rule(self.tf.name, self.rules[1]['out_ports'] ) assert test_model_str == answer2 def test_gen_model_by_plink(self): answer = [] answer.append('p = sw001_10 & next(p) = sw002_10') answer.append('p = sw002_10 & next(p) = sw001_10') answer.append('p = sw001_11 & next(p) = sw003_11') answer.append('p = sw003_11 & next(p) = sw001_11') edge1 = Edge('sw001','10','sw002','10') edge2 = Edge('sw001','11','sw003','11') plink = [edge1,edge2] test_model_str = self.nu._gen_model_by_plink(plink) assert test_model_str == answer def test_gen_model_by_end_ports(self): answer = [] answer.append('p = sw001_10 & next(p) = sw001_10') answer.append('p = sw001_11 & next(p) = sw001_11') test_model_str = self.nu._gen_model_by_end_ports(self.tf.name, self.tf.end_ports) assert test_model_str == answer def test_generate_nusmv_input(self): answer = "MODULE main\n" answer += "\n" answer += "VAR\n" answer += "p : {sw0_0, sw001_0, sw001_1, sw001_2, sw001_3, sw001_10, sw001_11, sw001_12 };\n" answer += "\n" answer += "INIT p = sw0_0;\n" answer += "\n" answer += "TRANS\n" answer += '( (p = sw001_1) & (next(p) = sw001_1) ) |\n' answer += '( (p = sw001_2 | p = sw001_3) & (next(p) = sw001_2 | next(p) = sw001_3) ) |\n' answer += '( p = sw001_10 & next(p) = sw001_10 ) |\n' answer += '( p = sw001_11 & next(p) = sw001_11 )' # |\n' # answer += '( p = sw001_0 & next(p) = sw001_0 )' var = "MODULE main\n" var += "\n" var += "VAR\n" var += "p : {sw0_0, sw001_0, sw001_1, sw001_2, sw001_3, sw001_10, sw001_11, sw001_12 };\n" var += "\n" # self.nu.generate_nusmv_var() self.nu.generated_nusmv_var += var self.nu.generate_nusmv_model(self.tf) self.nu.generate_nusmv_input() print self.nu.generated_nusmv_input print answer assert self.nu.generated_nusmv_input == answer def test_run_reachability(self): var = "MODULE main\n" var += "\n" var += "VAR\n" var += "p : {sw0_0, sw001_0, sw001_1, sw001_2, sw001_3, sw001_10, sw001_11, sw001_12 };\n" var += "\n" self.nu.generated_nusmv_var += var # self.nu.generate_nusmv_var() self.nu.generate_nusmv_model(self.tf) self.nu.generate_nusmv_input() ret = self.nu.run_reachability('sw001_1','sw001_1') # ret = self.nu.execute_nusmv() assert ret == True def test_two_sw_case(self): tf1 = TF('sw001', [1,2]) tf1.rules.append( {'in_ports' : [1]} ) tf1.rules.append( {'in_ports' : [2]} ) tf1.rules[0]['out_ports'] = [2] tf1.rules[1]['out_ports'] = [1] tf1.end_ports = [1] tf2 = TF('sw002', [1,2]) tf2.rules.append( {'in_ports' : [1]} ) tf2.rules.append( {'in_ports' : [2]} ) tf2.rules[0]['out_ports'] = [2] tf2.rules[1]['out_ports'] = [1] tf2.end_ports = [1] tf_list = [tf1, tf2] plink = [Edge(tf1.name, 2, tf2.name, 2)] self.nu.generate_network_model(tf_list, plink) self.nu.generate_nusmv_input() ret = self.nu.run_reachability('sw001_1','sw002_1') assert ret == True def test_three_sw_case(self): tf1 = TF('sw001', [1,2]) tf1.rules.append( {'in_ports' : [1]} ) tf1.rules.append( {'in_ports' : [2]} ) tf1.rules[0]['out_ports'] = [2] tf1.rules[1]['out_ports'] = [1] tf1.end_ports = [1] tf2 = TF('sw002', [2,3]) tf2.rules.append( {'in_ports' : [2]} ) tf2.rules.append( {'in_ports' : [3]} ) tf2.rules[0]['out_ports'] = [3] tf2.rules[1]['out_ports'] = [2] tf2.end_ports = [] tf3 = TF('sw003', [3,1]) tf3.rules.append( {'in_ports' : [3]} ) tf3.rules.append( {'in_ports' : [1]} ) tf3.rules[0]['out_ports'] = [1] tf3.rules[1]['out_ports'] = [3] tf3.end_ports = [1] tf_list = [tf1, tf2, tf3] plink = [Edge(tf1.name, 2, tf2.name, 2),Edge(tf2.name, 3, tf3.name, 3)] self.nu.generate_network_model(tf_list, plink) self.nu.generate_nusmv_input() ret = self.nu.run_reachability('sw001_1','sw003_1') assert ret == True