예제 #1
0
    def test_get_next(self):
        expected = self.next_record
        actual = NistBeacon.get_next(self.target_timestamp)

        self.assertTrue(actual.valid_signature)
        self.assertEqual(expected, actual)
        self.assertIsNot(expected, actual)
예제 #2
0
    def test_get_next(self, requests_get_patched):
        mock_response = Mock(spec=Response)
        mock_response.status_code = 200
        mock_response.text = self.expected_next.xml
        requests_get_patched.return_value = mock_response

        next_record = NistBeacon.get_next(self.reference_timestamp)
        self.assertEqual(self.expected_next, next_record)
예제 #3
0
def iterate_over_records():
    db_file_name = 'nist.db'

    # Setup the database
    db = sqlite3.connect(db_file_name)
    cursor = db.cursor()
    cursor.execute(
        'CREATE TABLE IF NOT EXISTS "beacon_values" ('
        'timestamp INTEGER,'
        'output_value  TEXT,'
        'seed_value    TEXT,'
        'previous_output_value TEXT,'
        'status_code   TEXT,'
        'version   TEXT,'
        'signature_value   TEXT,'
        'frequency INTEGER,'
        'PRIMARY KEY(timestamp)'
        ')'
    )
    db.commit()
    db.close()

    # IF rows
    db = sqlite3.connect(db_file_name)
    cursor = db.cursor()
    cursor.execute(
        'SELECT timestamp FROM beacon_values ORDER BY timestamp DESC LIMIT 1;'
    )
    result = cursor.fetchone()
    db.close()

    if result:
        # Go to the next record from the last timestamp in the database
        record = NistBeacon.get_next(result[0])
    else:
        # We begin at record zero
        record = NistBeacon.get_first_record()

    # Open the database
    db = sqlite3.connect(db_file_name)
    cursor = db.cursor()

    while True:
        if record is None:
            print("Got 'None' back for a record. Stopping.")
            break

        print(
            "{0} - {1} - {2}".format(
                record.timestamp,
                record.valid_signature,
                record.output_value,
            )
        )

        # Insert this record
        cursor.execute(
            'INSERT INTO beacon_values('
            'timestamp, output_value, seed_value, previous_output_value, '
            'status_code, version, signature_value, frequency'
            ')'
            'VALUES('
            ':timestamp, :output_value, :seed_value, :previous_output_value,'
            ':status_code, :version, :signature_value, :frequency'
            ')',
            {
                'timestamp': record.timestamp,
                'output_value': record.output_value,
                'seed_value': record.seed_value,
                'previous_output_value': record.previous_output_value,
                'status_code': record.status_code,
                'version': record.version,
                'signature_value': record.signature_value,
                'frequency': record.frequency,
            }
        )
        db.commit()

        # Advance to the next record
        record = NistBeacon.get_next(record.timestamp)

    # Close out
    db.close()