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)
Example #2
0
    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)
Example #6
0
 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)