Completed
Push — master ( 6b3dc5...fc7bd2 )
by Olivier
08:03 queued 04:37
created

TestClient   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 71
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 2
Bugs 1 Features 0
Metric Value
c 2
b 1
f 0
dl 0
loc 71
ccs 48
cts 48
cp 1
rs 10
wmc 12
1
import unittest
2
3
from opcua import Client
4
from opcua import Server
5
from opcua import ua
6
7
from tests_common import CommonTests, add_server_methods
8
9
port_num1 = 48510
10
11
12
class TestClient(unittest.TestCase, CommonTests):
13
14
    '''
15
    Run common tests on client side
16
    Of course we need a server so we start also start a server
17
    Tests that can only be run on client side must be defined  in this class
18
    '''
19
    @classmethod
20
    def setUpClass(self):
21
        # start our own server
22
        self.srv = Server()
23
        self.srv.set_endpoint('opc.tcp://localhost:%d' % port_num1)
24
        add_server_methods(self.srv)
25
        self.srv.start()
26
27
        # start admin client
28
        # long timeout since travis (automated testing) can be really slow
29
        self.clt = Client('opc.tcp://admin@localhost:%d' % port_num1, timeout=10)
30
        self.clt.connect()
31
        self.opc = self.clt
32
33
        # start anonymous client
34
        self.ro_clt = Client('opc.tcp://localhost:%d' % port_num1)
35
        self.ro_clt.connect()
36
37
38
39
    @classmethod
40
    def tearDownClass(self):
41
        #stop our clients
42
        self.ro_clt.disconnect()
43
        self.clt.disconnect()
44
        # stop the server 
45
        self.srv.stop()
46
47
    def test_service_fault(self):
48
        request = ua.ReadRequest()
49
        request.TypeId = ua.FourByteNodeId(999)  # bad type!
50
        with self.assertRaises(ua.UaStatusCodeError):
51
            self.clt.uaclient._uasocket.send_request(request)
52
53
    def test_objects_anonymous(self):
54
        objects = self.ro_clt.get_objects_node()
55
        with self.assertRaises(ua.UaStatusCodeError):
56
            objects.set_attribute(ua.AttributeIds.WriteMask, ua.DataValue(999))
57
        with self.assertRaises(ua.UaStatusCodeError):
58
            f = objects.add_folder(3, 'MyFolder')
59
60
    def test_folder_anonymous(self):
61
        objects = self.clt.get_objects_node()
62
        f = objects.add_folder(3, 'MyFolderRO')
63
        f_ro = self.ro_clt.get_node(f.nodeid)
64
        self.assertEqual(f, f_ro)
65
        with self.assertRaises(ua.UaStatusCodeError):
66
            f2 = f_ro.add_folder(3, 'MyFolder2')
67
68
    def test_variable_anonymous(self):
69
        objects = self.clt.get_objects_node()
70
        v = objects.add_variable(3, 'MyROVariable', 6)
71
        v.set_value(4) #this should work
72
        v_ro = self.ro_clt.get_node(v.nodeid)
73
        with self.assertRaises(ua.UaStatusCodeError):
74
            v_ro.set_value(2)
75
        self.assertEqual(v_ro.get_value(), 4)
76
        v.set_writable(True)
77
        v_ro.set_value(2) #now it should work
78
        self.assertEqual(v_ro.get_value(), 2)
79
        v.set_writable(False)
80
        with self.assertRaises(ua.UaStatusCodeError):
81
            v_ro.set_value(9)
82
        self.assertEqual(v_ro.get_value(), 2)
83
84
85