def local_register_server2(client, logger, name, address, capabilities, isOnline): # Nominal behavior: IsOnline = True params = ua.RegisterServer2Parameters() params.Server.IsOnline = isOnline params.Server.ServerUri = "urn:S2OPC:{}".format(name) params.Server.ProductUri = "urn:S2OPC:{}".format(name) serverName = ua.uatypes.LocalizedText() serverName.Locale = "en" serverName.Text = name params.Server.ServerNames.append(serverName) params.Server.DiscoveryUrls.append(address) mdnsConfig = ua.MdnsDiscoveryConfiguration() mdnsConfig.MdnsServerName = name # all authorized identifier capabilities mdnsConfig.ServerCapabilities = capabilities params.DiscoveryConfiguration.append(mdnsConfig) try: configResults = client.uaclient.register_server2(params) except: logger.add_test( 'FindServersOnNetwork test - nominal register ServerName={} IsOnline={}. Expecting Good == {}' .format(name, isOnline, sys.exc_info()[0]), False) else: logger.add_test( 'FindServersOnNetwork test - nominal register ServerName={} IsOnline={}. Expecting Good == 0x{:02X}' .format(name, isOnline, configResults[0].value), ua.uatypes.StatusCode("Good") == configResults[0])
def register_server(self, server, discovery_configuration=None): """ register a server to discovery server if discovery_configuration is provided, the newer register_server2 service call is used """ serv = ua.RegisteredServer() serv.ServerUri = server.application_uri serv.ProductUri = server.product_uri serv.DiscoveryUrls = [server.endpoint.geturl()] serv.ServerType = server.application_type serv.ServerNames = [ua.LocalizedText(server.name)] serv.IsOnline = True if discovery_configuration: params = ua.RegisterServer2Parameters() params.Server = serv params.DiscoveryConfiguration = discovery_configuration return self.bclient.register_server2(params) else: return self.bclient.register_server(serv)
def _register_server(serverToRegister, registrationClient, uaDiscoveryConfiguration=None): """ Register serverToRegister to discovery server if uaDiscoveryConfiguration is provided, the newer register_server2 service call is used """ uaRegSrv = ua.RegisteredServer() uaRegSrv.ServerUri = serverToRegister.get_application_uri() uaRegSrv.ProductUri = serverToRegister.product_uri uaRegSrv.DiscoveryUrls = [serverToRegister.endpoint.geturl()] uaRegSrv.ServerType = serverToRegister.application_type uaRegSrv.ServerNames = [ua.LocalizedText(serverToRegister.name)] uaRegSrv.IsOnline = serverToRegister.iserver.is_running() if uaDiscoveryConfiguration: params = ua.RegisterServer2Parameters() params.Server = uaRegSrv params.DiscoveryConfiguration = uaDiscoveryConfiguration return registrationClient.uaclient.register_server2(params) else: return registrationClient.uaclient.register_server(uaRegSrv)
def register_server2_test(client, logger): # RegisterServer2 test # Nominal behavior: IsOnline = True params = ua.RegisterServer2Parameters() params.Server.ServerUri = "urn:S2OPC:RegisteredServer" params.Server.ProductUri = "urn:S2OPC:RegisteredServer" serverName = ua.uatypes.LocalizedText() serverName.Locale = "en" serverName.Text = "MyServer registered" params.Server.ServerNames.append(serverName) params.Server.DiscoveryUrls.append("opc.tcp://localhost:4841") mdnsConfig = ua.MdnsDiscoveryConfiguration() mdnsConfig.MdnsServerName = "MyServer registered with mDNS config" # all authorized identifier capabilities mdnsConfig.ServerCapabilities = allServerCapabilities params.DiscoveryConfiguration.append(mdnsConfig) try: configResults = client.uaclient.register_server2(params) except: logger.add_test( 'RegisterServer2 test - nominal register IsOnline=True. Expecting Good == {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - nominal register IsOnline=True. Expecting Good == 0x{:02X}' .format(configResults[0].value), ua.uatypes.StatusCode("Good") == configResults[0]) # Nominal behavior: IsOnline = False copyParams = copy.deepcopy(params) copyParams.Server.IsOnline = False try: configResults = client.uaclient.register_server2(copyParams) except: logger.add_test( 'RegisterServer2 test - nominal register IsOnline=False. Expecting Good == {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - nominal register IsOnline=False. Expecting Good == 0x{:02X}' .format(configResults[0].value), ua.uatypes.StatusCode("Good") == configResults[0]) # Empty server Uri degParams = copy.deepcopy(params) degParams.Server.ServerUri = None try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadServerUriInvalid: logger.add_test( 'RegisterServer2 test - empty ServerUri register failed with BadServerUri', True) except: logger.add_test( 'RegisterServer2 test - empty ServerUri register failed. Expected BadServerUri != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - empty ServerUri register failed. Expected BadServerUri != Good', False) # Empty product Uri degParams = copy.deepcopy(params) degParams.Server.ProductUri = None try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadInvalidArgument: logger.add_test( 'RegisterServer2 test - empty ProductUri register failed with BadInvalidArgument', True) except: logger.add_test( 'RegisterServer2 test - empty ProductUri register failed. Expected BadInvalidArgument != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - empty ProductUri register failed. Expected BadInvalidArgument != Good', False) # Empty server names degParams = copy.deepcopy(params) degParams.Server.ServerNames = [] try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadServerNameMissing: logger.add_test( 'RegisterServer2 test - empty ServerNames register failed with BadServerNameMissing', True) except: logger.add_test( 'RegisterServer2 test - empty ServerNames register failed. Expected BadServerNameMissing != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - empty ServerNames register failed. Expected BadServerNameMissing != Good', False) # Invalid ApplicationType (client) degParams = copy.deepcopy(params) degParams.Server.ServerType = ua.uaprotocol_auto.ApplicationType.Client try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadInvalidArgument: logger.add_test( 'RegisterServer2 test - invalid ApplicationType (client) register failed with BadInvalidArgument', True) except: logger.add_test( 'RegisterServer2 test - invalid ApplicationType (client) register failed. Expected BadInvalidArgument != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - invalid ApplicationType (client) register failed. Expected BadInvalidArgument != Good', False) # Empty discovery URLs degParams = copy.deepcopy(params) degParams.Server.DiscoveryUrls = [] try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadDiscoveryUrlMissing: logger.add_test( 'RegisterServer2 test - empty ServerNames register failed with BadDiscoveryUrlMissing', True) except: logger.add_test( 'RegisterServer2 test - empty ServerNames register failed. Expected BadDiscoveryUrlMissing != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - empty ServerNames register failed. Expected BadDiscoveryUrlMissing != Good', False) # Define unsupported semaphoreFilePAth degParams = copy.deepcopy(params) degParams.Server.SemaphoreFilePath = "/tmp/MyServerSemaphoreFile" try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadSempahoreFileMissing: logger.add_test( 'RegisterServer2 test - unsupported SemaphoreFilePath register failed with BadSemaphoreFileMissing', True) except: logger.add_test( 'RegisterServer2 test - unsupported SemaphoreFilePath register failed. Expected BadSemaphoreFileMissing != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - unsupported SemaphoreFilePath register failed. Expected BadSemaphoreFileMissing != Good', False) # Define no discovery configuration degParams = copy.deepcopy(params) degParams.DiscoveryConfiguration = [] try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadInvalidArgument: logger.add_test( 'RegisterServer2 test - no discovery configuration register failed with BadInvalidArgument', True) except: logger.add_test( 'RegisterServer2 test - no discovery configuration register failed. Expected BadInvalidArgument != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - no discovery configuration register failed. Expected BadInvalidArgument != Good', False) # Define several discovery configuration (no mDNS) degParams = copy.deepcopy(params) degParams.DiscoveryConfiguration = [] degParams.DiscoveryConfiguration.append(ua.UserIdentityToken()) degParams.DiscoveryConfiguration.append(ua.UserIdentityToken()) try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadInvalidArgument: logger.add_test( 'RegisterServer2 test - no mDNS discovery configuration register failed with BadInvalidArgument', True) except: logger.add_test( 'RegisterServer2 test - no mDNS discovery configuration register failed. Expected BadInvalidArgument != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - no mDNS discovery configuration register failed. Expected BadInvalidArgument != Good', False) # Define several discovery configuration (several mDNS) degParams = copy.deepcopy(params) degParams.DiscoveryConfiguration.append(ua.UserIdentityToken()) degParams.DiscoveryConfiguration.append(ua.UserIdentityToken()) degParams.DiscoveryConfiguration.append( degParams.DiscoveryConfiguration[0]) try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadInvalidArgument: logger.add_test( 'RegisterServer2 test - several mDNS discovery configuration register failed with BadInvalidArgument', True) except: logger.add_test( 'RegisterServer2 test - several mDNS discovery configuration register failed. Expected BadInvalidArgument != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - several mDNS discovery configuration register failed. Expected BadInvalidArgument != Good', False) # Define several discovery configuration (only one mDNS) degParams = copy.deepcopy(params) degParams.DiscoveryConfiguration.append(ua.UserIdentityToken()) degParams.DiscoveryConfiguration.append(ua.UserIdentityToken()) try: configResults = client.uaclient.register_server2(degParams) except: logger.add_test( 'RegisterServer2 test - several discovery with only 1 mDNS configuration register. Expected Good != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - several discovery with only 1 mDNS configuration register. Expected configurationResult[0] == Good: found 0x{:02X}' .format(configResults[0].value), ua.uatypes.StatusCode("Good") == configResults[0]) logger.add_test( 'RegisterServer2 test - several discovery with only 1 mDNS configuration register. Expected configurationResult[1] == BadNotSupported: found 0x{:02X}' .format(configResults[1].value), ua.uatypes.StatusCode("BadNotSupported") == configResults[1]) logger.add_test( 'RegisterServer2 test - several discovery with only 1 mDNS configuration register. Expected configurationResult[2] == BadNotSupported: found 0x{:02X}' .format(configResults[2].value), ua.uatypes.StatusCode("BadNotSupported") == configResults[2]) # Define 1 mDNS configuration with an invalid server capability degParams = copy.deepcopy(params) degParams.DiscoveryConfiguration[0].ServerCapabilities.pop( ) # remove a valid server capability degParams.DiscoveryConfiguration[0].ServerCapabilities.append( "BEE") # add an invalid server capability try: configResults = client.uaclient.register_server2(degParams) except ua.uaerrors._auto.BadInvalidArgument: logger.add_test( 'RegisterServer2 test - mDNS discovery config with invalid capability register failed with BadInvalidArgument', True) except: logger.add_test( 'RegisterServer2 test - mDNS discovery config with invalid capability register failed. Expected BadInvalidArgument != {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - mDNS discovery config with invalid capability register failed. Expected BadInvalidArgument != Good', False) # Restore empty record: IsOnline = False copyParams = copy.deepcopy(params) copyParams.Server.IsOnline = False try: configResults = client.uaclient.register_server2(copyParams) except: logger.add_test( 'RegisterServer2 test - nominal register IsOnline=False. Expecting Good == {}' .format(sys.exc_info()[0]), False) else: logger.add_test( 'RegisterServer2 test - nominal register IsOnline=False. Expecting Good == 0x{:02X}' .format(configResults[0].value), ua.uatypes.StatusCode("Good") == configResults[0])