Ejemplo n.º 1
0
    def setup_method(self, method):
        
        # Create NodeConfig instance
        self.nodeConfig = NodeConfig(configFilePath)

        if method.__name__ != "test_init":
            self.nodeParams = NodeParams(config=self.nodeConfig) # Create NodeParams instance
Ejemplo n.º 2
0
    def __init__(self, configFile=[], config=[]):
        if configFile:
            self.config = NodeConfig(configFile)
        elif config:
            self.config = config

        self.setupParams()
Ejemplo n.º 3
0
    def __init__(self, configFile=[], config=[]):
        if configFile:
            self.config = NodeConfig(configFile)
        elif config:
            self.config = config

        # Configuration update holder
        self.newConfig = None

        # Mesh status
        self.restartTime = None
        self.restartRequested = False
        self.restartConfirmed = False

        self.setupParams()
Ejemplo n.º 4
0
    def test_protobufConversion(self):
        """Tests conversion between json and protobuf configuration representations."""

        # Convert json data to protobuf format
        with open (configFilePath, "r") as jsonFile:
            configData = json.load(jsonFile)
        #protobuf = self.nodeConfig.toProtoBuf(configData)
        protobuf = NodeConfig.toProtoBuf(configData)

        # Convert back to json representation
        #fromProtobuf = self.nodeConfig.fromProtoBuf(protobuf.SerializeToString())
        fromProtobuf = NodeConfig.fromProtoBuf(protobuf.SerializeToString())
        
        # Hash config instance from conversion and compare to initial configuration
        nc_protobuf = NodeConfig(configData=fromProtobuf)

        assert(self.nodeConfig.calculateHash() == nc_protobuf.calculateHash())
Ejemplo n.º 5
0
    def test_loadConfig(self):
        """Test loadConfig method of NodeParams."""

        # Create new config for update
        newConfig = NodeConfig(configFilePath)
        newConfigHash = newConfig.calculateHash()
        with open(configFilePath, "r") as jsonFile:
            configData = json.load(jsonFile)
        newConfig_pb = NodeConfig.toProtoBuf(configData).SerializeToString()

        # Test update method
        badHash = hashlib.sha1()
        assert (self.nodeParams.loadConfig(newConfig_pb, badHash) == False
                )  # test rejection with bad hash
        assert (self.nodeParams.newConfig == None)
        assert (self.nodeParams.loadConfig(newConfig_pb, newConfigHash) == True
                )  # test acceptance
        assert (self.nodeParams.newConfig != None)
Ejemplo n.º 6
0
    def setup_method(self, method):
        
        # Populate truth data
        #self.configTruthData = json.load(open(configFilePath))

        ### Update truth data to match expected node configuration output
        #self.configTruthData.update({'nodeId': 0})
            
        # TDMA comm test
        #if method.__name__ == 'test_TDMACommConfigLoad': 
        #    self.configTruthData['commType'] = 'TDMA'

        # Create node config json input file
        #with open(testConfigFilePath, 'w') as outfile:
        #    json.dump(self.configTruthData, outfile)

        # Create NodeConfig instance
        self.nodeConfig = NodeConfig(configFilePath)
Ejemplo n.º 7
0
    def loadConfig(self, newConfig, hashValue):
        '''Verify and queue new configuration for loading.'''

        # Convert from protobuf to json
        jsonConfig = NodeConfig.fromProtoBuf(newConfig)
        jsonConfig['node'][
            'nodeId'] = self.config.nodeId  # Don't overwrite node id via update

        # Create, verify, and store new configuration
        newConfig = NodeConfig(configData=jsonConfig)

        if (newConfig.calculateHash() == hashValue
                and newConfig.loadSuccess):  # configuration verified
            #self.newConfig = newConfig
            return [True, newConfig]
        else:
            #self.newConfig = None
            return [False, None]
Ejemplo n.º 8
0
    def test_updateConfig(self):
        """Test updateConfig method of NodeParams."""

        # Load valid new config
        newConfig = NodeConfig(configFilePath)
        newConfigHash = newConfig.calculateHash()
        with open(configFilePath, "r") as jsonFile:
            configData = json.load(jsonFile)
        newConfig_pb = NodeConfig.toProtoBuf(configData).SerializeToString()
        self.nodeParams.loadConfig(newConfig_pb, newConfigHash)

        # Test successful loading
        self.nodeParams.config.FCBaudrate = newConfig.FCBaudrate / 2.0  # change a parameter to verify loading of new config
        assert (self.nodeParams.config.FCBaudrate != newConfig.FCBaudrate)
        assert (self.nodeParams.updateConfig() == True)
        assert (self.nodeParams.config.FCBaudrate == newConfig.FCBaudrate)
        assert (self.nodeParams.newConfig == None)

        # Expect no load when config missing
        assert (self.nodeParams.updateConfig() == False)
Ejemplo n.º 9
0
    def test_calculateHash(self):
        """Test calculateHash method of NodeConfig."""
        # Verify that hash value does not change when unique parameters are different
        nodeConfig = NodeConfig(noNodeConfigFilePath)

        assert(nodeConfig.calculateHash() == self.nodeConfig.calculateHash())
Ejemplo n.º 10
0
 def test_readNodeId(self):
     """Test proper call of readNodeId method of NodeConfig."""
     nodeConfig = NodeConfig(noNodeConfigFilePath)
     assert(nodeConfig.nodeId == 1) # defaults to node 1 when no nodeId provided
Ejemplo n.º 11
0
 def test_missingConfigEntry(self):
     """Test for missing configuration entry in configuration file."""
     with pytest.raises(KeyError) as e:
         nodeConfig = NodeConfig(badConfigFilePath)
     pass  
Ejemplo n.º 12
0
 def test_invalidFileLoad(self):
     """Test for failed load due to bad configuration file."""
     with pytest.raises(customExceptions.NodeConfigFileError) as e:
         nodeConfig = NodeConfig("invalidFile")
Ejemplo n.º 13
0
 def test_noFileLoad(self):
     """Test for failed load of configuration due to no file provided."""
     nodeConfig = NodeConfig("")
     assert(nodeConfig.nodeId == -1)
     assert(nodeConfig.loadSuccess == False)