Completed
Push — dev ( 14d7ed )
by Olivier
02:30
created

tests.TestServer   A

Complexity

Total Complexity 19

Size/Duplication

Total Lines 114
Duplicated Lines 0 %

Test Coverage

Coverage 100%
Metric Value
dl 0
loc 114
ccs 81
cts 81
cp 1
rs 10
wmc 19

9 Methods

Rating   Name   Duplication   Size   Complexity  
A test_register_namespace() 0 5 1
A test_server_method() 0 8 2
A func() 0 3 1
A tearDownClass() 0 4 1
A test_register_use_namespace() 0 7 1
A test_xml_import() 0 6 1
A setUpClass() 0 11 1
F test_find_servers2() 0 30 9
A test_discovery() 0 15 3
1 1
import unittest
2 1
from tests_common import CommonTests, add_server_methods
3 1
import time
4
5 1
from opcua import Server
6 1
from opcua import Client
7 1
from opcua import ua
8
9
10 1
port_num = 485140
11 1
port_discovery = 48550
12
13
14 1
class TestServer(unittest.TestCase, CommonTests):
15
16
    '''
17
    Run common tests on server side
18
    Tests that can only be run on server side must be defined here
19
    '''
20 1
    @classmethod
21
    def setUpClass(self):
22 1
        self.srv = Server()
23 1
        self.srv.set_endpoint('opc.tcp://localhost:%d' % port_num)
24 1
        add_server_methods(self.srv)
25 1
        self.srv.start()
26 1
        self.opc = self.srv
27 1
        self.discovery = Server()
28 1
        self.discovery.set_application_uri("urn:freeopcua:python:discovery")
29 1
        self.discovery.set_endpoint('opc.tcp://localhost:%d' % port_discovery)
30 1
        self.discovery.start()
31
32 1
    @classmethod
33
    def tearDownClass(self):
34 1
        self.srv.stop()
35 1
        self.discovery.stop()
36
37 1
    def test_discovery(self):
38 1
        client = Client(self.discovery.endpoint.geturl())
39 1
        client.connect()
40 1
        try:
41 1
            servers = client.find_servers()
42 1
            new_app_uri = "urn:freeopcua:python:server:test_discovery"
43 1
            self.srv.application_uri = new_app_uri
44 1
            self.srv.register_to_discovery(self.discovery.endpoint.geturl(), 0)
45 1
            time.sleep(0.1) # let server register registration
46 1
            new_servers = client.find_servers()
47 1
            self.assertEqual(len(new_servers) - len(servers) , 1)
48 1
            self.assertFalse(new_app_uri in [s.ApplicationUri for s in servers])
49 1
            self.assertTrue(new_app_uri in [s.ApplicationUri for s in new_servers])
50
        finally:
51 1
            client.disconnect()
52
    
53 1
    def test_find_servers2(self):
54 1
        client = Client(self.discovery.endpoint.geturl())
55 1
        client.connect()
56 1
        try:
57 1
            servers = client.find_servers()
58 1
            new_app_uri1 = "urn:freeopcua:python:server:test_discovery1"
59 1
            self.srv.application_uri = new_app_uri1
60 1
            self.srv.register_to_discovery(self.discovery.endpoint.geturl(), period=0)
61 1
            new_app_uri2 = "urn:freeopcua:python:test_discovery2"
62 1
            self.srv.application_uri = new_app_uri2
63 1
            self.srv.register_to_discovery(self.discovery.endpoint.geturl(), period=0)
64 1
            time.sleep(0.1) # let server register registration
65 1
            new_servers = client.find_servers()
66 1
            self.assertEqual(len(new_servers) - len(servers) , 2)
67 1
            self.assertFalse(new_app_uri1 in [s.ApplicationUri for s in servers])
68 1
            self.assertFalse(new_app_uri2 in [s.ApplicationUri for s in servers])
69 1
            self.assertTrue(new_app_uri1 in [s.ApplicationUri for s in new_servers])
70 1
            self.assertTrue(new_app_uri2 in [s.ApplicationUri for s in new_servers])
71
            # now do a query with filer
72 1
            new_servers = client.find_servers(["urn:freeopcua:python:server"])
73 1
            self.assertEqual(len(new_servers) - len(servers) , 0)
74 1
            self.assertTrue(new_app_uri1 in [s.ApplicationUri for s in new_servers])
75 1
            self.assertFalse(new_app_uri2 in [s.ApplicationUri for s in new_servers])
76
            # now do a query with filer
77 1
            new_servers = client.find_servers(["urn:freeopcua:python"])
78 1
            self.assertEqual(len(new_servers) - len(servers) , 2)
79 1
            self.assertTrue(new_app_uri1 in [s.ApplicationUri for s in new_servers])
80 1
            self.assertTrue(new_app_uri2 in [s.ApplicationUri for s in new_servers])
81
        finally:
82 1
            client.disconnect()
83
84
85
    """
86
    # not sure if this test is necessary, and there is a lot repetition with previous test
87
    def test_discovery_server_side(self):
88
        servers = self.discovery.find_servers()
89
        self.assertEqual(len(servers), 1)
90
        self.srv.register_to_discovery(self.discovery.endpoint.geturl(), 1)
91
        time.sleep(1) # let server register registration
92
        servers = self.discovery.find_servers()
93
        print("SERVERS 2", servers)
94
        self.assertEqual(len(servers), 2)
95
    """
96
    #def test_register_server2(self):
97
        #servers = self.opc.register_server()
98
99 1
    def test_register_namespace(self):
100 1
        uri = 'http://mycustom.Namespace.com'
101 1
        idx1 = self.opc.register_namespace(uri)
102 1
        idx2 = self.opc.get_namespace_index(uri)
103 1
        self.assertEqual(idx1, idx2)
104
105 1
    def test_register_use_namespace(self):
106 1
        uri = 'http://my_very_custom.Namespace.com'
107 1
        idx = self.opc.register_namespace(uri)
108 1
        root = self.opc.get_root_node()
109 1
        myvar = root.add_variable(idx, 'var_in_custom_namespace', [5])
110 1
        myid = myvar.nodeid
111 1
        self.assertEqual(idx, myid.NamespaceIndex)
112
113 1
    def test_server_method(self):
114 1
        def func(parent, variant):
115 1
            variant.Value *= 2
116 1
            return [variant]
117 1
        o = self.opc.get_objects_node()
118 1
        v = o.add_method(3, 'Method1', func, [ua.VariantType.Int64], [ua.VariantType.Int64])
119 1
        result = o.call_method(v, ua.Variant(2.1))
120 1
        self.assertEqual(result, 4.2)
121
122 1
    def test_xml_import(self):
123 1
        self.srv.import_xml("tests/custom_nodes.xml")
124 1
        o = self.opc.get_objects_node()
125 1
        v = o.get_child(["MyXMLFolder", "MyXMLObject", "MyXMLVariable"])
126 1
        val = v.get_value()
127 1
        self.assertEqual(val, "StringValue")
128
129
130
131