def test_createLocation(self, config): options = None cs = COSMSend(options) device = 'device 1' port = 'port 1' config.assert_called_once_with() cs.config = self.config_data data = { 'device': device, 'port': port, Constants.DataPacket.arrival_time: '12:12:12 12/12/15', Constants.DataPacket.current_value: 10 } location = cs.createLocation(device, port) self.assertEqual(location[Constants.Cosm.location.exposure], Constants.Cosm.location.exposure) self.assertEqual(location[Constants.Cosm.location.domain], Constants.Cosm.location.domain) self.assertEqual(location[Constants.Cosm.location.disposition], Constants.Cosm.location.disposition) self.assertEqual(location[Constants.Cosm.location.latitude], Constants.Cosm.location.latitude) self.assertEqual(location[Constants.Cosm.location.longitude], Constants.Cosm.location.longitude) self.assertEqual(location[Constants.Cosm.location.private], Constants.Cosm.location.private)
def test_createFeed(self, config): options = None cs = COSMSend(options) device = 'device 1' port = 'port 1' config.assert_called_once_with() cs.config = self.config_data data = { 'device': device, 'port': port, Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 5), Constants.DataPacket.current_value: 10 } cs.createDataStream(device, port, data) feed = cs.createFeed(data, device, port) pprint.pprint(feed) self.assertEqual(feed[Constants.Cosm.title], Constants.Cosm.title) self.assertEqual(feed[Constants.Cosm.status], Constants.Cosm.status) self.assertEqual(feed[Constants.Cosm.creator], Constants.Cosm.creator) self.assertEqual(feed[Constants.Cosm.created], Constants.Cosm.created) self.assertEqual(feed[Constants.Cosm.feed], 'url') self.assertEqual(feed[Constants.Cosm.email], Constants.Cosm.email) self.assertEqual(feed[Constants.Cosm.id], Constants.Cosm.id) self.assertEqual(feed[Constants.Cosm.auto_feed_url], ('url', )) self.assertEqual(feed[Constants.Cosm.version], Constants.Cosm.version) cs.empty_datastream_list() cs = None
def test_createDataStream(self, config): options = None cs = COSMSend(options) config.assert_called_once_with() cs.config = self.config_data device = 'device 1' port = 'port 1' current_value = 10 data = { 'device': device, 'port': port, Constants.DataPacket.units: 'X', Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 5), Constants.DataPacket.current_value: current_value } cs.createDataStream(device, port, data) item = cs.datastreams.pop() self.assertEqual(item[Constants.Cosm.datastream.min_value], 0) self.assertEqual(item[Constants.Cosm.datastream.max_value], 100) self.assertEqual(item[Constants.Cosm.datastream.tags], 'tags') self.assertEqual(item[Constants.DataPacket.current_value], current_value) self.assertEqual(item['id'], '1')
def test_createLocation_with_bad_port(self, config): options = None cs = COSMSend(options) config.assert_called_once_with() cs.config = self.config_data with self.assertRaisesRegexp( KeyError, 'Port is not in cosm configuration file: port 2'): cs.createLocation('device 1', 'port 2')
def test_report_data_in_test_mode(self, config): device = 'device' port = 'port' options = MagicMock() options.in_test_mode = MagicMock() http = Mock() data = { Constants.DataPacket.device: device, Constants.DataPacket.port: port, Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 5), Constants.DataPacket.current_value: 10 } cs = COSMSend(options) cs.config = config_data = \ {'device': \ {'port': \ { Constants.Cosm.datastream.tags: 'tag', Constants.Cosm.datastream.cosm_channel: '1', Constants.Cosm.datastream.max_value: 100, Constants.Cosm.datastream.min_value: 0, Constants.Cosm.location.created: 'created', Constants.Cosm.location.disposition: "fixed", Constants.Cosm.location.domain: 'domain', Constants.Cosm.location.exposure: 'exposure', Constants.Cosm.location.latitude: 30.3351807498968, Constants.Cosm.location.longitude: 97.7104604244232 * -1.0, # Eclipse save causes error Constants.Cosm.location.private: 'private', Constants.Cosm.apikey: 'apikey', Constants.Cosm.auto_feed_url: "https://api.cosm.com/v2/feeds/64451.json", Constants.Cosm.creator: "https://cosm.com/users/gary_pickens", Constants.Cosm.created: 'created', Constants.Cosm.email: "*****@*****.**", Constants.Cosm.feed: "https://api.cosm.com/v2/feeds/64451.json", Constants.Cosm.id: 64451, Constants.Cosm.private: "false", Constants.Cosm.status: "frozen", Constants.Cosm.tags: ["Door", "Temperature"], Constants.Cosm.title: "Garage", Constants.Cosm.updated: 'updated', Constants.Cosm.url: 'url', Constants.Cosm.version: "1.0.0", Constants.Cosm.location_str: 'location', Constants.Cosm.datastreams: 'datastreams', } } } cs.report_data(json, data, http)
def test_createDataStream_with_bad_no_current_value(self, config): options = None cs = COSMSend(options) config.assert_called_once_with() cs.config = self.config_data device = 'device 1' port = 'port 1' data = { 'device': device, 'port': port, Constants.DataPacket.arrival_time: '12:12:12 12/12/14', # Constants.DataPacket.current_value: 10 } with self.assertRaisesRegexp(KeyError, 'current_value is not in data'): cs.createDataStream(device, port, data)
def test_output_with_exception(self, c): options = MagicMock(in_test_mode=False) device = 'device' port = 'port' data = { Constants.DataPacket.device: device, Constants.DataPacket.port: port } cs = COSMSend(options) cs.createDataStream = Mock() cs.createJSONReport = Mock() cs.report_data = Mock(side_effect=Exception('Test')) cs.output(data) cs.createDataStream.called_once_with(device, port, data) cs.createJSONReport.called_once_with(device, port, data) cs.report_data.called_once_with(device, port, data)
def test_createDataStream_with_two_datapoints(self, config): options = None cs = COSMSend(options) config.assert_called_once_with() cs.config = self.config_data device = 'device 1' port = 'port 1' current_value = 10 data = { 'device': device, 'port': port, Constants.DataPacket.units: 'X', Constants.DataPacket.action: Constants.DataPacket.accumulate, Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 5), Constants.DataPacket.current_value: current_value } cs.createDataStream(device, port, data) # self.assertListEqual( cs.datapoints['1'], [{'at':'2012-01-02T03:04:05', 'value': 10}] ) cs.createDataStream(device, port, data) # self.assertListEqual( cs.datapoints['1'], [{'at':'2012-01-02T03:04:05', 'value': 10}, {'at':'2012-01-02T03:04:05', 'value': 10}] ) data = { 'device': device, 'port': port, Constants.DataPacket.units: 'X', Constants.DataPacket.action: Constants.DataPacket.accumulate, Constants.DataPacket.action: Constants.DataPacket.send, Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 6), Constants.DataPacket.current_value: 11 } cs.createDataStream(device, port, data) self.assertListEqual(cs.datapoints['1'], [])
def test_createFeed_with_two_datestreams(self, config): options = None cs = COSMSend(options) device = 'device 1' port = 'port 1' config.assert_called_once_with() cs.config = self.config_data data = { 'device': device, 'port': port, Constants.DataPacket.action: Constants.DataPacket.accumulate, Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 5), Constants.DataPacket.current_value: 10 } cs.createDataStream(device, port, data) data[Constants.DataPacket.current_value] = 545454 cs.createDataStream(device, port, data) data['device'] = device = 'device 2' data[Constants.DataPacket.current_value] = 999 cs.createDataStream(device, port, data) data['device'] = device = 'device 1' data[Constants.DataPacket.action] = Constants.DataPacket.send cs.report_data = MagicMock() cs.output(data) pprint.pprint(cs.json) pprint.pprint(cs.datapoints) # self.assertEqual( cs.[Constants.Cosm.title], Constants.Cosm.title ) # self.assertEqual( cs.json[Constants.Cosm.status], Constants.Cosm.status ) # self.assertEqual( cs.json[Constants.Cosm.creator], Constants.Cosm.creator ) # self.assertEqual( cs.json[Constants.Cosm.created], Constants.Cosm.created ) # self.assertEqual( cs.json[Constants.Cosm.feed], 'url' ) # self.assertEqual( cs.json[Constants.Cosm.email], Constants.Cosm.email ) # self.assertEqual( cs.json[Constants.Cosm.id], Constants.Cosm.id ) # self.assertEqual( cs.json[Constants.Cosm.auto_feed_url], ( 'url', ) ) # self.assertEqual( cs.json[Constants.Cosm.version], Constants.Cosm.version ) cs = None
def test_createFeed_with_no_port_in_config_file(self, config): options = None cs = COSMSend(options) device = 'device 1' port = 'port' config.assert_called_once_with() cs.config = self.config_data data = { Constants.DataPacket.device: device, Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 5), Constants.DataPacket.current_value: 10 } with self.assertRaisesRegexp( KeyError, 'Port is not in cosm configuration file:.*'): feed = cs.createFeed(data, device, port) cs = None
def test_empty_datastream_list(self, config): options = None cs = COSMSend(options) cs.empty_datastream_list() device = 'device 1' port = 'port 1' config.assert_called_once_with() cs.config = self.config_data data = { 'device': device, 'port': port, Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 5), Constants.DataPacket.current_value: 10 } self.assertEqual(len(cs.datastreams), 0) cs.createDataStream(device, port, data) cs.createDataStream(device, port, data) cs.empty_datastream_list()
def test_config_file_name(self, c): options = MagicMock(in_test_mode=False) cs = COSMSend(options) self.assertEqual(cs.configuration_file_name, 'housemonitor.outputs.cosm.send')
def test_report_data_with_AttribueError(self, config): device = 'device' port = 'port' options = MagicMock(in_test_mode=False) response = Mock(status=200) attr = {'request.side_effect': AttributeError} http = Mock(**attr) data = { Constants.DataPacket.device: device, Constants.DataPacket.port: port, Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 5), Constants.DataPacket.current_value: 10 } cs = COSMSend(options) cs.config = config_data = \ {'device': \ {'port': \ { Constants.Cosm.datastream.tags: 'tag', Constants.Cosm.datastream.cosm_channel: '1', Constants.Cosm.datastream.max_value: 100, Constants.Cosm.datastream.min_value: 0, Constants.Cosm.location.created: 'created', Constants.Cosm.location.disposition: "fixed", Constants.Cosm.location.domain: 'domain', Constants.Cosm.location.exposure: 'exposure', Constants.Cosm.location.latitude: 30.3351807498968, Constants.Cosm.location.longitude: 97.7104604244232 * -1.0, # Eclipse save causes error Constants.Cosm.location.private: 'private', Constants.Cosm.apikey: 'apikey', Constants.Cosm.auto_feed_url: "https://api.cosm.com/v2/feeds/64451.json", Constants.Cosm.creator: "https://cosm.com/users/gary_pickens", Constants.Cosm.created: 'created', Constants.Cosm.email: "*****@*****.**", Constants.Cosm.feed: "https://api.cosm.com/v2/feeds/64451.json", Constants.Cosm.id: 64451, Constants.Cosm.private: "false", Constants.Cosm.status: "frozen", Constants.Cosm.tags: ["Door", "Temperature"], Constants.Cosm.title: "Garage", Constants.Cosm.updated: 'updated', Constants.Cosm.url: 'url', Constants.Cosm.version: "1.0.0", Constants.Cosm.location_str: 'location', Constants.Cosm.datastreams: 'datastreams', } } } json = 'test' cs.report_data(json, data, http) print http.request.call_args http.request.assert_called_once_with( 'url', body='test', headers={ 'Content-Type': 'application/x-www-form-urlencoded', 'X-PachubeApiKey': 'apikey' }, method='PUT')
def test_createJSONReport(self, config): options = None cs = COSMSend(options) device = 'device 1' port = 'port 1' config.assert_called_once_with() cs.config = config_data = \ {'device 1': \ {'port 1': \ { Constants.Cosm.datastream.tags: 'tag', Constants.Cosm.datastream.cosm_channel: '1', Constants.Cosm.datastream.max_value: 100, Constants.Cosm.datastream.min_value: 0, Constants.Cosm.location.created: 'created', Constants.Cosm.location.disposition: "fixed", Constants.Cosm.location.domain: 'domain', Constants.Cosm.location.exposure: 'exposure', Constants.Cosm.location.latitude: 30.3351807498968, Constants.Cosm.location.longitude: 97.7104604244232 * -1.0, # Eclipse save causes error Constants.Cosm.location.private: 'private', Constants.Cosm.apikey: 'apikey', Constants.Cosm.auto_feed_url: "https://api.cosm.com/v2/feeds/64451.json", Constants.Cosm.creator: "https://cosm.com/users/gary_pickens", Constants.Cosm.created: 'created', Constants.Cosm.email: "*****@*****.**", Constants.Cosm.feed: "https://api.cosm.com/v2/feeds/64451.json", Constants.Cosm.id: 64451, Constants.Cosm.private: "false", Constants.Cosm.status: "frozen", Constants.Cosm.tags: ["Door", "Temperature"], Constants.Cosm.title: "Garage", Constants.Cosm.updated: 'updated', Constants.Cosm.url: 'url', Constants.Cosm.version: "1.0.0", Constants.Cosm.location_str: 'location', Constants.Cosm.datastreams: 'datastreams', } } } data = { 'device': device, 'port': port, Constants.DataPacket.arrival_time: datetime.datetime(2012, 1, 2, 3, 4, 5), Constants.DataPacket.current_value: 10 } cs.createDataStream(device, port, data) data[Constants.DataPacket.current_value] = 545454 cs.createDataStream(device, port, data) json = cs.createJSONReport(device, port, data) pprint.pprint(json) cs.empty_datastream_list() cs = None