Beispiel #1
0
    def testRemoved(self):
        """Removed should be items in the second set
        that are not in the first"""

        modelOne = models.SensorType(id=1, name="foo", units="Co2")
        modelTwo = models.RoomType(id=1, name="Bedroom")
        modelThree = models.SensorType(id=2, name="bar")
        modelFour = models.RoomType(id=2, name="Bathroom")

        firstDict = {
            1: modelOne,
            2: modelTwo,
            3: modelThree,
        }

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        dd = dictdiff.DictDiff(firstDict, secondDict)

        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        testSet = set([4])

        self.assertEqual(added, emptySet)
        self.assertEqual(removed, testSet)
        self.assertEqual(changed, emptySet)
Beispiel #2
0
    def testEq(self):
        """Test for Equality"""
        #Test Equality
        item1 = models.SensorType(id=1,
                                  name="Temperture",
                                  code="T",
                                  units="DegC",
                                  c0=0,
                                  c1=1,
                                  c2=0,
                                  c3=1)

        item2 = models.SensorType(id=1,
                                  name="Temperture",
                                  code="T",
                                  units="DegC",
                                  c0=0,
                                  c1=1,
                                  c2=0,
                                  c3=1)

        self.assertEqual(item1, item2)
        self.assertReallyEqual(item1, item2)

        #Neither the C0,C1...
        item2.c0 = 1
        item2.c2 = 1

        self.assertEqual(item1, item2)
        self.assertReallyEqual(item1, item2)
Beispiel #3
0
    def testCmp(self):

        item1 = models.SensorType(id=1,
                                  name="Temperture",
                                  code="T",
                                  units="DegC",
                                  c0=0,
                                  c1=1,
                                  c2=0,
                                  c3=1)

        item2 = models.SensorType(id=1,
                                  name="Temperture",
                                  code="T",
                                  units="DegC",
                                  c0=0,
                                  c1=1,
                                  c2=0,
                                  c3=1)

        self.assertEqual(item1, item2)

        #CMP on Id
        item2.name = "A_Temperature"
        self.assertGreater(item1, item2)

        item2.name = "Z_Temperature"
        self.assertLess(item1, item2)
Beispiel #4
0
    def testChangedObject(self):
        """Items whose value differes between keys"""
        modelOne = models.SensorType(id=1, name="foo", units="Co2")
        modelTwo = models.RoomType(id=1, name="Bedroom")
        modelThree = models.SensorType(id=2, name="bar")

        #RoomType eqality is based on the name not Id
        #Thus these two models should be the same
        modelFour = models.RoomType(id=2, name="Bathroom")
        modelFive = models.RoomType(id=1, name="Bathroom")

        self.assertEqual(modelFour, modelFive)

        #So for this first test we expect that there will be NO
        #Unchanged items.
        firstDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFive}

        dd = dictdiff.DictDiff(firstDict, secondDict)

        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        testSet = set([4])

        self.assertEqual(added, emptySet)
        self.assertEqual(removed, emptySet)
        self.assertEqual(changed, emptySet)

        #However lets run that again when the objects do not come out
        #Equal

        modelFive = models.RoomType(id=1, name="BathroomA")
        self.assertNotEqual(modelFour, modelFive)

        firstDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFive}

        dd = dictdiff.DictDiff(firstDict, secondDict)

        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        testSet = set([4])

        self.assertEqual(added, emptySet)
        self.assertEqual(removed, emptySet)
        self.assertEqual(changed, testSet)
Beispiel #5
0
    def test_sensortypes_remote(self):
        """Does Synching of sensortypes work as expected

        Sensortypes should be synchronised across all servers.
        Additionally, no sensortype should have an id conflict.
        """

        #Remove the new objects we have added
        rurl = "{0}sensortype/".format(RESTURL)

        #First thing to check is that our local version of the database is as
        #expected
        session = self.Session()
        qry = session.query(models.SensorType)

        #As many sensor types as expected
        self.assertEqual(qry.count(), NUM_SENSORTYPES)

        #So Lets delete a couple of sensortypes and check they get added back
        qry = session.query(models.SensorType).filter_by(id=1)
        qry.delete()
        qry = session.query(models.SensorType).filter_by(id=3)
        qry.delete()
        session.flush()
        session.commit()

        #So now we have removed the sensortypes we need to check they come back
        self.pusher.sync_sensortypes()

        session = self.Session()
        qry = session.query(models.SensorType)
        #As many sensor types as expected
        self.assertEqual(qry.count(), NUM_SENSORTYPES)
        qry = session.query(
            models.SensorType).filter_by(name="Delta Temperature")
        item = qry.first()
        self.assertTrue(item)
        self.assertEquals(item.id, 1)
        qry = session.query(models.SensorType).filter_by(name="Delta Humidity")
        item = qry.first()
        self.assertTrue(item)
        self.assertEquals(item.id, 3)
        session.flush()
        session.commit()
        session.close()
        """What happens if we have more on the local server"""
        session = self.Session()
        sensor = models.SensorType(id=5000, name="Foo Sensor")
        session.add(sensor)
        session.flush()
        session.commit()

        #Now push
        self.pusher.sync_sensortypes()
        qry = requests.get(rurl)
        self.assertEqual(len(qry.json()), NUM_SENSORTYPES + 1)

        self.assertEqual(qry.json()[NUM_SENSORTYPES]["name"], "Foo Sensor")
Beispiel #6
0
    def test_Rcv_Sensor(self):
        """Does Recieve work when that sensortype is not in the DB"""

        now = datetime.datetime.utcnow()
        #Create our bitmask
        bs = Bitset(size=Packets.SC_SIZE)
        #Try to setup a temperature sample
        bs[Packets.SC_D_TEMPERATURE] = True

        #Then A packet
        packet = StateMsg(addr=4242)
        packet.set_ctp_parent_id(101)  #Parent Node Id
        packet.set_special(0xc7)  #Special Id

        packet.set_packed_state_mask(bs.a)
        packet.set_packed_state([22.5])

        self.testbif.receive(packet)
        output = self.blogger.mainloop()
        self.assertTrue(output)

        #Check stuff gets added to the database correctly
        session = self.Session()

        #Does the sensortype exist now (Apparently its not a FK in Reading)
        #qry = session.query(models.SensorType).filter_by(id=1).first()
        #self.assertTrue(qry)
        #Is the name UNKNOWN
        #self.assertEqual(qry.Name, "UNKNOWN")

        #NodeState
        qry = session.query(models.NodeState).filter_by(nodeId=4242)
        self.assertEqual(qry.count(), 1)
        qry = qry.first()
        self.assertTrue(qry)
        tdiff = qry.time - now
        self.assertLess(tdiff.seconds, 1.0)
        self.assertEqual(qry.parent, 101)

        #And Reading
        qry = session.query(models.Reading).filter_by(nodeId=4242)
        #As we just did temperature there should only be one reading
        self.assertEqual(qry.count(), 1)
        qry = qry.first()
        self.assertTrue(qry)
        self.assertEqual(qry.typeId, 1)
        self.assertEqual(qry.value, 22.5)

        #Reset the sensor type to be as it should
        qry = session.query(models.SensorType).filter_by(id=1).first()
        if qry is None:
            qry = models.SensorType(id=1)
            session.add(qry)

        qry.name = "Delta Temperature"
        qry.code = "dT"
        qry.units = "deg.C/s"
Beispiel #7
0
    def testNEQ(self):
        item1 = models.SensorType(id=1,
                                  name="Temperture",
                                  code="T",
                                  units="DegC",
                                  c0=0,
                                  c1=1,
                                  c2=0,
                                  c3=1)

        item2 = models.SensorType(id=1,
                                  name="Temperture",
                                  code="T",
                                  units="DegC",
                                  c0=0,
                                  c1=1,
                                  c2=0,
                                  c3=1)

        self.assertEqual(item1, item2)

        item2.id = 2
        self.assertNotEqual(item1, item2)
        self.assertReallyNotEqual(item1, item2)

        item2.id = 1
        item2.name = "FOO"
        self.assertNotEqual(item1, item2)
        self.assertReallyNotEqual(item1, item2)

        item2.name = "Temperature"
        item2.code = "C"

        self.assertNotEqual(item1, item2)
        self.assertReallyNotEqual(item1, item2)

        item2.code = "T"
        item2.units = "PPM"

        self.assertNotEqual(item1, item2)
        self.assertReallyNotEqual(item1, item2)
Beispiel #8
0
    def testEqual(self):

        modelOne = models.SensorType(id=1, name="foo", units="Co2")
        modelTwo = models.RoomType(id=1, name="Bedroom")
        modelThree = models.SensorType(id=2, name="bar")
        modelFour = models.RoomType(id=2, name="Bathroom")

        firstDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        dd = dictdiff.DictDiff(firstDict, secondDict)
        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        self.assertEqual(added, emptySet)
        self.assertEqual(removed, emptySet)
        self.assertEqual(changed, emptySet)
Beispiel #9
0
    def _serialobj(self):
        """Helper Method to provde an object to serialise"""
        theItem = models.SensorType(id=1,
                                    name="Temperature",
                                    code="T",
                                    units="DegC",
                                    c0=0,
                                    c1=1,
                                    c2=0,
                                    c3=1)

        return theItem
Beispiel #10
0
    def testChanged(self):
        """Items whose value differes between keys"""
        modelOne = models.SensorType(id=1, name="foo", units="Co2")
        modelTwo = models.RoomType(id=1, name="Bedroom")
        modelThree = models.SensorType(id=2, name="bar")
        modelFour = models.RoomType(id=2, name="Bathroom")

        firstDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelFour}

        secondDict = {1: modelOne, 2: modelTwo, 3: modelThree, 4: modelThree}

        dd = dictdiff.DictDiff(firstDict, secondDict)

        added = dd.added()
        removed = dd.removed()
        changed = dd.changed()
        unchanged = dd.unchanged()

        emptySet = set()
        testSet = set([4])

        self.assertEqual(added, emptySet)
        self.assertEqual(removed, emptySet)
        self.assertEqual(changed, testSet)
Beispiel #11
0
    def __init__(self):
        log = logging.getLogger(__name__)
        self.log = log
        log.debug("Starting Serial connection")
        self.con = serial.Serial("/dev/ttyUSB0", 115200, timeout=10)
        log.debug("Starting Database Connection")
        engine = sqlalchemy.create_engine(DBFILE, echo=False)
        #Actually not that fussed in this test code about creating stuff propery

        meta.Base.metadata.bind = engine
        meta.Base.metadata.create_all(engine)

        meta.Session.configure(bind=engine)

        log.debug("Populating Data")
        #Populate with our intial dataset
        models.populateData.init_data()

        #And add our local sensor types
        session = meta.Session()
        sensortype = models.SensorType(id=HOPS, name="CTP hops")
        session.merge(sensortype)
        sensortype = models.SensorType(id=TX_PWR, name="Tx Power")
        session.merge(sensortype)
        sensortype = models.SensorType(id=N_COUNT, name="Neighbor Count")
        session.merge(sensortype)
        sensortype = models.SensorType(id=CTP_SEQ, name="CTP Sequence")
        session.merge(sensortype)
        sensortype = models.SensorType(id=2000, name="Neigh0")
        session.merge(sensortype)
        sensortype = models.SensorType(id=2001, name="Neigh1")
        session.merge(sensortype)
        sensortype = models.SensorType(id=2002, name="Neigh2")
        session.merge(sensortype)
        sensortype = models.SensorType(id=2003, name="Neigh3")
        session.merge(sensortype)

        session.flush()
        session.commit()