コード例 #1
0
 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]
コード例 #2
0
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