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

tests.TestClient.setUpClass()   A

Complexity

Conditions 1

Size

Total Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

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