コード例 #1
0
    def test_autoCreateSensor(self):
        sensorNotFound = Mock()
        sensorNotFound.status_code = 404
        sensorNotFound.text = '{"errorcode": "404-001", "message": ""}'

        created = Mock()
        created.status_code = 201

        ok = Mock()
        ok.status_code = 200

        request = Mock()
        request.side_effect = [authRequest(), sensorNotFound, created, ok]
        sensorcloud.webrequest.Requests.Request = request

        device = sensorcloud.Device("FAKE", "fake")
        sensor = device.sensor("sensor")
        self.assertTrue("channel" in sensor)

        calls = [
                mock.call('GET', 'https://dsx.sensorcloud.microstrain.com/SensorCloud/devices/FAKE/sensors/sensor/channels/channel/attributes/', mock.ANY),
                mock.call('PUT', 'https://dsx.sensorcloud.microstrain.com/SensorCloud/devices/FAKE/sensors/sensor/', mock.ANY),
                mock.call('GET', 'https://dsx.sensorcloud.microstrain.com/SensorCloud/devices/FAKE/sensors/sensor/channels/channel/attributes/', mock.ANY)
        ]
        request.assert_has_calls(calls)
コード例 #2
0
def main():
    deviceName, key, sensorName, channelName = sys.argv[1:]

    device = sensorcloud.Device(deviceName, key)
    sensor = device.sensor(sensorName)
    channel = sensor.channel(channelName)

    channel.timeseries_append(sensorcloud.SampleRate.seconds(10),
                              [sensorcloud.Point(timeNow(), 10.5)])
コード例 #3
0
    def test_authError(self):
        authRequestMock = Mock()
        authRequestMock.doRequest = Mock()
        authRequestMock.status_code = 401
        authRequestMock.text = '{"errorcode": "401-001", "message": ""}'
        sensorcloud.webrequest.Requests.Request = Mock(
            return_value=authRequestMock)

        with self.assertRaises(sensorcloud.UnauthorizedError):
            device = sensorcloud.Device("FAKE", "fake")
            device._requests.authenticate()
コード例 #4
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_truncatedUpload(self):
        uploadRequest = Mock()
        uploadRequest.doRequest = Mock()
        uploadRequest.status_code = 400
        uploadRequest.reason = ""
        uploadRequest.text = '{"errorcode": "400-038", "message": ""}'
        sensorcloud.webrequest.Requests.Request = Mock()
        sensorcloud.webrequest.Requests.Request.side_effect = [authRequest(), uploadRequest]

        with self.assertRaises(sensorcloud.TruncatedUploadError):
            device = sensorcloud.Device("FAKE", "fake")
            sensor = device.sensor("sensor")
            channel = sensor.channel("channel")
            channel.timeseries_append(sensorcloud.SampleRate.hertz(10), [sensorcloud.Point(12345, 10.5)])
コード例 #5
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_timeseriesGatewayTimeout(self):
        uploadRequest = Mock()
        uploadRequest.doRequest = Mock()
        uploadRequest.status_code = 504
        uploadRequest.reason = ""
        uploadRequest.text = "text"
        sensorcloud.webrequest.Requests.Request = Mock()
        sensorcloud.webrequest.Requests.Request.side_effect = [authRequest(), uploadRequest]

        with self.assertRaises(sensorcloud.ServerError):
            device = sensorcloud.Device("FAKE", "fake")
            sensor = device.sensor("sensor")
            channel = sensor.channel("channel")
            channel.timeseries_append(sensorcloud.SampleRate.hertz(10), [sensorcloud.Point(12345, 10.5)])
コード例 #6
0
    def test_reauthentication(self):
        unauthorized = Mock()
        unauthorized.status_code = 401

        ok = Mock()
        ok.status_code = 200

        request = Mock()
        request.side_effect = [authRequest(), unauthorized, authRequest(), ok]
        sensorcloud.webrequest.Requests.Request = request

        device = sensorcloud.Device("FAKE", "fake")
        response = device.url("/fake/").get()
        self.assertEqual(response.status_code, 200)
コード例 #7
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_histogramConflict(self):
        uploadRequest = Mock()
        uploadRequest.doRequest = Mock()
        uploadRequest.status_code = 409
        uploadRequest.reason = ""
        uploadRequest.text = '{"errorcode": "409-001", "message": ""}'
        sensorcloud.webrequest.Requests.Request = Mock()
        sensorcloud.webrequest.Requests.Request.side_effect = [authRequest(), uploadRequest]

        with self.assertRaises(sensorcloud.UserError):
            device = sensorcloud.Device("FAKE", "fake")
            sensor = device.sensor("sensor")
            channel = sensor.channel("channel")
            data = [sensorcloud.Histogram(1234, 0, 1, [10.5])]
            channel.histogram_append(sensorcloud.SampleRate.hertz(10), data)
コード例 #8
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_histogramGatewayTimeout(self):
        uploadRequest = Mock()
        uploadRequest.doRequest = Mock()
        uploadRequest.status_code = 504
        uploadRequest.reason = ""
        uploadRequest.text = "text"
        sensorcloud.webrequest.Requests.Request = Mock()
        sensorcloud.webrequest.Requests.Request.side_effect = [authRequest(), uploadRequest]

        with self.assertRaises(sensorcloud.ServerError):
            device = sensorcloud.Device("FAKE", "fake")
            sensor = device.sensor("sensor")
            channel = sensor.channel("channel")
            data = [sensorcloud.Histogram(1234, 0, 1, [10.5])]
            channel.histogram_append(sensorcloud.SampleRate.hertz(10), data)
コード例 #9
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_cacheSetOnUpload(self):
        request = Mock()
        request.side_effect = [authRequest(), created(), created()]
        sensorcloud.webrequest.Requests.Request = request

        fd, path = tempfile.mkstemp()
        os.close(fd)
        device = sensorcloud.Device("FAKE", "fake", cache_file=path)
        sensor = device.sensor("sensor")
        channel = sensor.channel("channel")
        channel.timeseries_append(sensorcloud.SampleRate.hertz(10), [sensorcloud.Point(12345, 10.5)])
        channel.histogram_append(sensorcloud.SampleRate.hertz(10), [sensorcloud.Histogram(123455, 0.0, 1.0, [10.5, 4328.3])])

        self.assertEqual(channel._cache.timeseries_partition(sensorcloud.SampleRate.hertz(10)).last_timestamp, 12345)
        self.assertEqual(channel._cache.histogram_partition(sensorcloud.SampleRate.hertz(10), 0.0, 1.0, 2).last_timestamp, 123455)
        os.unlink(path)
コード例 #10
0
    def test_autoCreateSensorFails(self):
        sensorNotFound = Mock()
        sensorNotFound.status_code = 404
        sensorNotFound.text = '{"errorcode": "404-001", "message": ""}'

        serverError = Mock()
        serverError.status_code = 500

        request = Mock()
        request.side_effect = [authRequest(), sensorNotFound, serverError]
        sensorcloud.webrequest.Requests.Request = request

        with self.assertRaises(sensorcloud.ServerError):
            device = sensorcloud.Device("FAKE", "fake")
            sensor = device.sensor("sensor")
            "channel" in sensor
コード例 #11
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_uploadHistogram(self):
        packer = xdrlib.Packer()
        packer.pack_int(1)
        packer.pack_int(0)
        noPartitions = Mock()
        noPartitions.status_code = 200
        noPartitions.raw = packer.get_buffer()

        request = Mock()
        request.side_effect = [authRequest(), created(), noPartitions]
        sensorcloud.webrequest.Requests.Request = request

        device = sensorcloud.Device("FAKE", "fake")
        sensor = device.sensor("sensor")
        channel = sensor.channel("channel")
        channel.histogram_append(sensorcloud.SampleRate.hertz(10), [sensorcloud.Histogram(12345, 0.0, 1.0, [10.5, 4328.3])])
        self.assertEqual(channel.last_timestamp_nanoseconds, 12345)
コード例 #12
0
    def test_authValid(self):
        token = "fake_token"
        server = "dsx.sensorcloud.microstrain.com"
        packer = xdrlib.Packer()
        packer.pack_string(token)
        packer.pack_string(server)
        packer.pack_string("")

        authRequestMock = Mock()
        authRequestMock.doRequest = Mock()
        authRequestMock.status_code = 200
        authRequestMock.raw = packer.get_buffer()
        sensorcloud.webrequest.Requests.Request = Mock(
            return_value=authRequestMock)

        device = sensorcloud.Device("FAKE", "fake")
        device._requests.authenticate()
        self.assertEqual(device._requests._authToken, token)
        self.assertEqual(device._requests._apiServer, "https://" + server)
コード例 #13
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_createAndRetryChannel404(self):
        sensorNotFound = Mock()
        sensorNotFound.status_code = 404
        sensorNotFound.text = '{"errorcode": "404-002", "message": ""}'

        created = Mock()
        created.status_code = 201

        request = Mock()
        request.side_effect = [authRequest(), sensorNotFound, created, created]
        sensorcloud.webrequest.Requests.Request = request

        device = sensorcloud.Device("FAKE", "fake")
        sensor = device.sensor("sensor")
        channel = sensor.channel("channel")
        channel.timeseries_append(sensorcloud.SampleRate.hertz(10), [sensorcloud.Point(12345, 10.5)])

        calls = [
                mock.call('POST', 'https://dsx.sensorcloud.microstrain.com/SensorCloud/devices/FAKE/sensors/sensor/channels/channel/streams/timeseries/data/', mock.ANY),
                mock.call('PUT', 'https://dsx.sensorcloud.microstrain.com/SensorCloud/devices/FAKE/sensors/sensor/channels/channel/', mock.ANY),
                mock.call('POST', 'https://dsx.sensorcloud.microstrain.com/SensorCloud/devices/FAKE/sensors/sensor/channels/channel/streams/timeseries/data/', mock.ANY)
        ]
        request.assert_has_calls(calls)
コード例 #14
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_noData_lastTimestampZero(self):
        packer = xdrlib.Packer()
        packer.pack_int(1)
        packer.pack_int(0)
        noPartitions = Mock()
        noPartitions.status_code = 200
        noPartitions.raw = packer.get_buffer()
        
        request = Mock()
        request.side_effect = [authRequest(), noPartitions, noPartitions]
        sensorcloud.webrequest.Requests.Request = request

        device = sensorcloud.Device("FAKE", "fake")
        sensor = device.sensor("sensor")
        channel = sensor.channel("channel")
        self.assertEqual(channel.last_timestamp_nanoseconds, 0)

        self.assertEqual(len(request.mock_calls), 3)
        self.assertTrue(mockCallArg(request.mock_calls[1], 1, "url").endswith("/partitions/"))
        self.assertTrue(mockCallArg(request.mock_calls[2], 1, "url").endswith("/partitions/"))
        self.assertTrue("Accept" in mockCallArg(request.mock_calls[1], 2, "options").headers and 
                mockCallArg(request.mock_calls[1], 2, "options").headers["Accept"] == "application/xdr")
        self.assertTrue("Accept" in mockCallArg(request.mock_calls[2], 2, "options").headers and 
                mockCallArg(request.mock_calls[2], 2, "options").headers["Accept"] == "application/xdr")
コード例 #15
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_cacheSetByGet(self):
        packer = xdrlib.Packer()
        packer.pack_int(1)
        packer.pack_int(2)
        packer.pack_uhyper(0)
        packer.pack_uhyper(12345)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(1)
        packer.pack_int(10)
        packer.pack_int(1)
        packer.pack_int(1)
        packer.pack_uhyper(12345)
        packer.pack_float(10.5)
        packer.pack_uhyper(0)
        packer.pack_uhyper(123456)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(1)
        packer.pack_int(15)
        packer.pack_int(1)
        packer.pack_int(1)
        packer.pack_uhyper(12345)
        packer.pack_float(10.5)
        tsPartitions = Mock()
        tsPartitions.status_code = 200
        tsPartitions.raw = packer.get_buffer()
        
        packer = xdrlib.Packer()
        packer.pack_int(1)
        packer.pack_int(2)
        packer.pack_uhyper(0)
        packer.pack_uhyper(12345)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(0)
        packer.pack_int(30)
        packer.pack_int(21)
        packer.pack_float(10.0)
        packer.pack_float(5.0)
        packer.pack_uhyper(0)
        packer.pack_uhyper(123455)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(0)
        packer.pack_int(60)
        packer.pack_int(10)
        packer.pack_float(11.0)
        packer.pack_float(8.0)
        histPartitions = Mock()
        histPartitions.status_code = 200
        histPartitions.raw = packer.get_buffer()

        request = Mock()
        request.side_effect = [authRequest(), tsPartitions, histPartitions]
        sensorcloud.webrequest.Requests.Request = request

        fd, path = tempfile.mkstemp()
        os.close(fd)
        device = sensorcloud.Device("FAKE", "fake", cache_file=path)
        sensor = device.sensor("sensor")
        channel = sensor.channel("channel")
        channel.last_timestamp_nanoseconds

        self.assertEqual(channel._cache.timeseries_partition(sensorcloud.SampleRate.hertz(10)).last_timestamp, 12345)
        self.assertEqual(channel._cache.timeseries_partition(sensorcloud.SampleRate.hertz(15)).last_timestamp, 123456)
        self.assertEqual(channel._cache.histogram_partition(sensorcloud.SampleRate.seconds(30), 10.0, 5.0, 21).last_timestamp, 12345)
        self.assertEqual(channel._cache.histogram_partition(sensorcloud.SampleRate.seconds(60), 11.0, 8.0, 10).last_timestamp, 123455)
        os.unlink(path)
コード例 #16
0
ファイル: test_channel.py プロジェクト: mstroehle/SensorCloud
    def test_lastTimestampUsesLatest(self):
        packer = xdrlib.Packer()
        packer.pack_int(1)
        packer.pack_int(2)
        packer.pack_uhyper(0)
        packer.pack_uhyper(12345)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(1)
        packer.pack_int(10)
        packer.pack_int(1)
        packer.pack_int(1)
        packer.pack_uhyper(12345)
        packer.pack_float(10.5)
        packer.pack_uhyper(0)
        packer.pack_uhyper(123456)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(1)
        packer.pack_int(10)
        packer.pack_int(1)
        packer.pack_int(1)
        packer.pack_uhyper(12345)
        packer.pack_float(10.5)
        tsPartitions = Mock()
        tsPartitions.status_code = 200
        tsPartitions.raw = packer.get_buffer()
        
        packer = xdrlib.Packer()
        packer.pack_int(1)
        packer.pack_int(2)
        packer.pack_uhyper(0)
        packer.pack_uhyper(12345)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(0)
        packer.pack_int(30)
        packer.pack_int(21)
        packer.pack_float(10.0)
        packer.pack_float(5.0)
        packer.pack_uhyper(0)
        packer.pack_uhyper(123455)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(0)
        packer.pack_int(60)
        packer.pack_int(10)
        packer.pack_float(11.0)
        packer.pack_float(8.0)
        histPartitions = Mock()
        histPartitions.status_code = 200
        histPartitions.raw = packer.get_buffer()

        request = Mock()
        request.side_effect = [authRequest(), tsPartitions, histPartitions]
        sensorcloud.webrequest.Requests.Request = request

        device = sensorcloud.Device("FAKE", "fake")
        sensor = device.sensor("sensor")
        channel = sensor.channel("channel")
        self.assertEqual(channel.last_timestamp_nanoseconds, 123456)

        packer = xdrlib.Packer()
        packer.pack_int(1)
        packer.pack_int(2)
        packer.pack_uhyper(0)
        packer.pack_uhyper(12345)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(1)
        packer.pack_int(10)
        packer.pack_int(1)
        packer.pack_int(1)
        packer.pack_uhyper(12345)
        packer.pack_float(10.5)
        packer.pack_uhyper(0)
        packer.pack_uhyper(123455)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(1)
        packer.pack_int(10)
        packer.pack_int(1)
        packer.pack_int(1)
        packer.pack_uhyper(12345)
        packer.pack_float(10.5)
        tsPartitions = Mock()
        tsPartitions.status_code = 200
        tsPartitions.raw = packer.get_buffer()
        
        packer = xdrlib.Packer()
        packer.pack_int(1)
        packer.pack_int(2)
        packer.pack_uhyper(0)
        packer.pack_uhyper(12345)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(0)
        packer.pack_int(30)
        packer.pack_int(21)
        packer.pack_float(10.0)
        packer.pack_float(5.0)
        packer.pack_uhyper(0)
        packer.pack_uhyper(123456)
        packer.pack_int(15)
        packer.pack_int(5000)
        packer.pack_int(0)
        packer.pack_int(60)
        packer.pack_int(10)
        packer.pack_float(11.0)
        packer.pack_float(8.0)
        histPartitions = Mock()
        histPartitions.status_code = 200
        histPartitions.raw = packer.get_buffer()

        request = Mock()
        request.side_effect = [authRequest(), tsPartitions, histPartitions]
        sensorcloud.webrequest.Requests.Request = request

        device = sensorcloud.Device("FAKE", "fake")
        sensor = device.sensor("sensor")
        channel = sensor.channel("channel")
        self.assertEqual(channel.last_timestamp_nanoseconds, 123456)
コード例 #17
0
d = Device(device_id, key)

print "test" in d

print d.has_sensor("test")

import logging
logging.basicConfig(level=logging.DEBUG)

Device_ID = "OAPI0079MY1R194D"
DEVICE_KEY = "5c2a834e6b276b7e9cdd0fabd07463197b0147d2146e2ea85aee9acc96a9434c"
AUTH_SERVER = "https://test.sensorcloud.microstrain.com"

device = sensorcloud.Device(device_id=Device_ID,
                            device_key=DEVICE_KEY,
                            auth_server=AUTH_SERVER)

s = device.sensor("test")

c = s["ch1"]
print c.name

#c.timeseries_append(SampleRate.hertz(1), [Point(datetime.now(),99)])

for p in c.timeseries_data():
    print p

print c.last_timestamp
print c.last_point