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)
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)])
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()
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)])
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)])
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)
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)
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)
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)
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
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)
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)
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)
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")
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)
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)
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