def test_simple(self): """ Read test data and pull out data particles one at a time. Assert that the results are those we expected. """ self.stream_handle = StringIO(Issmcnsm_flortdParserUnitTestCase.TEST_DATA) self.parser = Issmcnsm_flortdParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) result = self.parser.get_records(1) self.assert_result(result, 188, self.timestamp1, self.particle_a) result = self.parser.get_records(1) self.assert_result(result, 261, self.timestamp2, self.particle_b) result = self.parser.get_records(1) self.assert_result(result, 334, self.timestamp3, self.particle_c) result = self.parser.get_records(1) self.assert_result(result, 407, self.timestamp4, self.particle_d) # no data left, dont move the position result = self.parser.get_records(1) self.assertEqual(result, []) self.assertEqual(self.parser._state[StateKey.POSITION], 407) self.assertEqual(self.state_callback_value[StateKey.POSITION], 407) if self.state_callback_value[StateKey.TIMESTAMP] - self.timestamp4 > .00001: self.fail('Timestamp %s is not close enough to %s' % (self.state_callback_value[StateKey.TIMESTAMP], self.timestamp4)) self.assert_(isinstance(self.publish_callback_value, list)) self.assertEqual(self.publish_callback_value[0], self.particle_d)
def test_get_many(self): """ Read test data and pull out multiple data particles at one time. Assert that the results are those we expected. """ self.stream_handle = StringIO( Issmcnsm_flortdParserUnitTestCase.TEST_DATA) self.parser = Issmcnsm_flortdParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) result = self.parser.get_records(3) self.assertEqual(result, [self.particle_a, self.particle_b, self.particle_c]) self.assertEqual(self.parser._state[StateKey.POSITION], 334) self.assertEqual(self.state_callback_value[StateKey.POSITION], 334) if self.state_callback_value[ StateKey.TIMESTAMP] - self.timestamp3 > .00001: self.fail('Timestamp %s is not close enough to %s' % (self.state_callback_value[StateKey.TIMESTAMP], self.timestamp3)) self.assertEqual(self.publish_callback_value[0], self.particle_a) self.assertEqual(self.publish_callback_value[1], self.particle_b) self.assertEqual(self.publish_callback_value[2], self.particle_c)
def test_no_timestamp(self): """ A sample is missing a timestamp, skip that sample """ self.stream_handle = StringIO(Issmcnsm_flortdParserUnitTestCase.NO_TIMESTAMP_TEST_DATA) self.parser = Issmcnsm_flortdParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) result = self.parser.get_records(1) self.assert_result(result, 188, self.timestamp1, self.particle_a) result = self.parser.get_records(1) self.assert_result(result, 310, self.timestamp3, self.particle_c)
def test_bad_data(self): """ Ensure that bad data is skipped when it exists. """ self.stream_handle = StringIO(Issmcnsm_flortdParserUnitTestCase.BAD_TEST_DATA) self.parser = Issmcnsm_flortdParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) result = self.parser.get_records(1) self.assert_result(result, 188, self.timestamp1, self.particle_a) result = self.parser.get_records(1) self.assert_result(result, 331, self.timestamp3, self.particle_c)
def test_mid_state_start(self): """ Test starting the parser in a state in the middle of processing """ new_state = {StateKey.POSITION:261, StateKey.TIMESTAMP:self.timestamp2} self.stream_handle = StringIO(Issmcnsm_flortdParserUnitTestCase.TEST_DATA) self.parser = Issmcnsm_flortdParser(self.config, new_state, self.stream_handle, self.state_callback, self.pub_callback) result = self.parser.get_records(1) self.assert_result(result, 334, self.timestamp3, self.particle_c) result = self.parser.get_records(1) self.assert_result(result, 407, self.timestamp4, self.particle_d)
def _build_parser(self, parser_state, infile): """ Build and return the parser """ config = self._parser_config config.update({ 'particle_module': 'mi.dataset.parser.issmcnsm_flortd', 'particle_class': 'Issmcnsm_flortdParserDataParticle' }) log.debug("My Config: %s", config) self._parser = Issmcnsm_flortdParser(config, parser_state, infile, self._save_parser_state, self._data_callback) return self._parser
def test_long_stream(self): """ Test a long stream of data """ self.stream_handle = StringIO(Issmcnsm_flortdParserUnitTestCase.LONG_TEST_DATA) self.parser = Issmcnsm_flortdParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) result = self.parser.get_records(15) self.assertEqual(result[0], self.particle_a) self.assertEqual(result[-1], self.particle_z) self.assertEqual(self.parser._state[StateKey.POSITION], 1279) self.assertEqual(self.state_callback_value[StateKey.POSITION], 1279) if self.state_callback_value[StateKey.TIMESTAMP] - self.timestamp_long > .00001: self.fail('Timestamp %s is not close enough to %s' % (self.state_callback_value[StateKey.TIMESTAMP], self.timestamp_long)) self.assertEqual(self.publish_callback_value[-1], self.particle_z)
def test_set_state(self): """ Test changing to a new state after initializing the parser and reading data, as if new data has been found and the state has changed """ new_state = {StateKey.POSITION:261, StateKey.TIMESTAMP:self.timestamp2} self.stream_handle = StringIO(Issmcnsm_flortdParserUnitTestCase.TEST_DATA) self.parser = Issmcnsm_flortdParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) result = self.parser.get_records(1) self.assert_result(result, 188, self.timestamp1, self.particle_a) self.parser.set_state(new_state) result = self.parser.get_records(1) self.assert_result(result, 334, self.timestamp3, self.particle_c) result = self.parser.get_records(1) self.assert_result(result, 407, self.timestamp4, self.particle_d)