示例#1
0
    def test_get_values_disconnected(self):
        conn_ts = datastore._get_timestamp_ms()
        futures = [ controller.subscribe(pv, SubscriptionMode.Monitor(delta=0.01)) \
                     for pv in self.existing_pvs ]
        results = [ fut.get() for fut in futures ]
        time.sleep(2)
        # when a pv gets disconnected, NaN should be stored as its value. 
        # moreover, the pv's status should reflect the disconnection at that
        # point in time
        for pv in self.existing_pvs:
            statuses = controller.get_statuses(pv)
            self.assertTrue(statuses)
            status = statuses[0]
            self.assertTrue(status['connected'])

            last_values = controller.get_values(pv)
            self.assertTrue(last_values['rows'])
            last_value = last_values['rows'][0]
            self.assertGreater(last_value['archived_at_ts'], conn_ts)
            self.assertGreater(last_value['value'], 1)


        predisconn_ts = datastore._get_timestamp_ms()
        _block_ioc(True)
        time.sleep(35)
        postdisconn_ts = datastore._get_timestamp_ms()

        for pv in self.existing_pvs:
            statuses = controller.get_statuses(pv)
            self.assertTrue(statuses)
            status = statuses[0]
            self.assertFalse(status['connected'])

            last_values = controller.get_values(pv)
            self.assertTrue(last_values['rows'])
            last_value = last_values['rows'][0]
            self.assertGreater(last_value['archived_at_ts'], predisconn_ts)
            self.assertGreater(postdisconn_ts, last_value['archived_at_ts'])
            self.assertIsNone(last_value['value'])

        _block_ioc(False)
示例#2
0
    def test_get_statuses(self):
        # connect
        futures = [controller.subscribe(pv, SubscriptionMode.Monitor(delta=0.01)) for pv in self.pvs]
        [ fut.wait() for fut in futures ]
        
        conn_ts = datastore._get_timestamp_ms()
        # 1st status from initial connection => true
        #
        self.assertEqual(_block_ioc(True), 0)
        time.sleep(40)
        # 2nd status after disconnection from timeout => false
        #
        self.assertEqual(_block_ioc(False), 0)
        # 3rd status after unblocking IOC, reconnection => true
        time.sleep(2)


        for pv in self.existing_pvs: 
            statuses = controller.get_statuses(pv, limit=3)
            self.assertTrue(statuses)
            self.assertTrue(len(statuses), 3)

            [reconn, disconn, conn] = statuses

            self.assertTrue(conn['connected'])
            self.assertLess( (conn['timestamp'] - conn_ts)/1e6, 0.5 )

            self.assertFalse(disconn['connected'])
            self.assertTrue(reconn['connected'])

            self.assertEqual(reconn['pvname'], pv)
            self.assertEqual(conn['pvname'], pv)
            self.assertEqual(disconn['pvname'], pv)
            
        for fakepv in self.fake_pvs:
            statuses = controller.get_statuses(fakepv)
            # they must be there, with 'connected' set to false
            for status in statuses:
                self.assertFalse(status['connected'])