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( Flort_kn__stc_imodemParserUnitTestCase.TEST_DATA_SHORT ) #turn into a data stream to look like file ingestion self.parser = Flort_kn_stc_imodemParser( self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) # last one is the link to the data source # next get engineering records result = self.parser.get_records(1) self.assert_result(result, 50, self.particle_a_eng, False) result = self.parser.get_records(1) self.assert_result(result, 76, self.particle_b_eng, False) result = self.parser.get_records(1) self.assert_result(result, 102, self.particle_c_eng, False) result = self.parser.get_records(1) self.assert_result(result, 128, self.particle_d_eng, True) # no data left, dont move the position result = self.parser.get_records(1) self.assertEqual(result, []) self.assertEqual(self.parser._state[StateKey.POSITION], 128) self.assertEqual(self.state_callback_value[StateKey.POSITION], 128) self.assert_(isinstance(self.publish_callback_value, list)) self.assertEqual(self.publish_callback_value[0], self.particle_d_eng)
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( Flort_kn__stc_imodemParserUnitTestCase.TEST_DATA_SHORT) self.parser = Flort_kn_stc_imodemParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) # start with the start time record result = self.parser.get_records(4) self.assertEqual(result, [ self.particle_a_eng, self.particle_b_eng, self.particle_c_eng, self.particle_d_eng ]) self.assertEqual(self.parser._state[StateKey.POSITION], 128) self.assertEqual(self.state_callback_value[StateKey.POSITION], 128) self.assertEqual(self.publish_callback_value[0], self.particle_a_eng) self.assertEqual(self.publish_callback_value[1], self.particle_b_eng) self.assertEqual(self.publish_callback_value[2], self.particle_c_eng) self.assertEqual(self.publish_callback_value[3], self.particle_d_eng) self.assertEqual(self.file_ingested_value, True)
def _build_parser(self, parser_state, infile, data_key=None): """ Build and return the parser """ if data_key == DataParticleType.FLORT_KN_INSTRUMENT_TELEMETERED: config = self._parser_config.get( DataParticleType.FLORT_KN_INSTRUMENT_TELEMETERED) config.update({ DataSetDriverConfigKeys.PARTICLE_MODULE: 'mi.dataset.parser.flort_kn__stc_imodem', DataSetDriverConfigKeys.PARTICLE_CLASS: 'Flort_kn_stc_imodemParserDataParticleTelemetered' }) elif data_key == DataParticleType.FLORT_KN_INSTRUMENT_RECOVERED: config = self._parser_config.get( DataParticleType.FLORT_KN_INSTRUMENT_RECOVERED) config.update({ DataSetDriverConfigKeys.PARTICLE_MODULE: 'mi.dataset.parser.flort_kn__stc_imodem', DataSetDriverConfigKeys.PARTICLE_CLASS: 'Flort_kn_stc_imodemParserDataParticleRecovered' }) else: return None log.debug("My Config: %s", config) parser = Flort_kn_stc_imodemParser( config, parser_state, infile, lambda state, ingested: self._save_parser_state( state, data_key, ingested), self._data_callback, self._sample_exception_callback) return parser
def test_bad_flags(self): """ test that we don't parse any records when the flags are not what we expect """ with self.assertRaises(SampleException): self.stream_handle = StringIO(Flort_kn__stc_imodemParserUnitTestCase.TEST_DATA_BAD_FLAGS) self.parser = Flort_kn_stc_imodemParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback)
def parse(basePythonCodePath, sourceFilePath, particleDataHdlrObj): with open(sourceFilePath,"r") as fil : parser = Flort_kn_stc_imodemParser( {DataSetDriverConfigKeys.PARTICLE_MODULE:"mi.dataset.parser.flort_kn__stc_imodem",DataSetDriverConfigKeys.PARTICLE_CLASS:"Flort_kn_stc_imodemParserDataParticleTelemetered"}, None, fil, lambda state,file : None, lambda state : None) driver = DataSetDriver(parser, particleDataHdlrObj) driver.processFileStream() return particleDataHdlrObj
def test_bad_data(self): """ Ensure that bad data causes us to miss records. """ self.stream_handle = StringIO(Flort_kn__stc_imodemParserUnitTestCase.TEST_DATA_BAD_ENG) self.parser = Flort_kn_stc_imodemParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) # next get engineering records result = self.parser.get_records(4) if len(result) == 4: self.fail("We got 4 records, the bad data should only make 3")
def test_mid_state_start(self): """ Test starting the parser in a state in the middle of processing """ new_state = {StateKey.POSITION: 76} self.stream_handle = StringIO(Flort_kn__stc_imodemParserUnitTestCase.TEST_DATA_SHORT) self.parser = Flort_kn_stc_imodemParser(self.config, new_state, self.stream_handle, self.state_callback, self.pub_callback) result = self.parser.get_records(1) self.assert_result(result, 102, self.particle_c_eng, False) result = self.parser.get_records(1) self.assert_result(result, 128, self.particle_d_eng, True)
def parse(unused, source_file_path, particle_data_handler): with open(source_file_path, "r") as fil: parser = Flort_kn_stc_imodemParser( { DataSetDriverConfigKeys.PARTICLE_MODULE: "mi.dataset.parser.flort_kn__stc_imodem", DataSetDriverConfigKeys.PARTICLE_CLASS: "Flort_kn_stc_imodemParserDataParticleRecovered" }, None, fil, lambda state, f: None, lambda state: None) driver = DataSetDriver(parser, particle_data_handler) driver.processFileStream() return particle_data_handler
def test_long_stream(self): """ Test a long stream of data """ self.stream_handle = StringIO(Flort_kn__stc_imodemParserUnitTestCase.TEST_DATA) self.parser = Flort_kn_stc_imodemParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) result = self.parser.get_records(32) self.assertEqual(result[0], self.particle_a_eng) self.assertEqual(result[-1], self.particle_last_eng) self.assertEqual(self.parser._state[StateKey.POSITION], 856) self.assertEqual(self.state_callback_value[StateKey.POSITION], 856) self.assertEqual(self.publish_callback_value[-1], self.particle_last_eng)
def _build_parser(self, stream_handle): parser_config = { DataSetDriverConfigKeys.PARTICLE_MODULE: "mi.dataset.parser.flort_kn__stc_imodem", DataSetDriverConfigKeys.PARTICLE_CLASS: "Flort_kn_stc_imodemParserDataParticle" } parser = Flort_kn_stc_imodemParser(parser_config, None, stream_handle, lambda state, f: None, lambda state: None) return parser
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: 76} self.stream_handle = StringIO(Flort_kn__stc_imodemParserUnitTestCase.TEST_DATA_SHORT) self.parser = Flort_kn_stc_imodemParser(self.config, self.start_state, self.stream_handle, self.state_callback, self.pub_callback) # set the new state, the essentially skips engineering a and b self.parser.set_state(new_state) result = self.parser.get_records(1) self.assert_result(result, 102, self.particle_c_eng, False) result = self.parser.get_records(1) self.assert_result(result, 128, self.particle_d_eng, True)