Ejemplo n.º 1
0
 def test_encoding_no_entries(self):
     dmp = pgdumplib.new('test', 'LATIN1')
     dmp.entries = []
     self.assertEqual(dmp.encoding, 'LATIN1')
     dmp.save('build/data/dump.test')
     dmp = pgdumplib.load('build/data/dump.test')
     self.assertEqual(dmp.encoding, 'UTF8')
Ejemplo n.º 2
0
    def test_bad_encoding(self):
        dmp = pgdumplib.new('test')
        dmp.entries[0].defn = 'BAD ENTRY WILL FAIL'
        dmp.save('build/data/dump.test')

        dmp = pgdumplib.load('build/data/dump.test')
        self.assertEqual(dmp.encoding, 'UTF8')
Ejemplo n.º 3
0
 def test_invalid_dependency(self):
     dmp = pgdumplib.new('test')
     with self.assertRaises(ValueError):
         dmp.add_entry(constants.TABLE,
                       '',
                       'block_table',
                       dependencies=[1024])
Ejemplo n.º 4
0
    def test_encoding_not_first_entry(self):
        dmp = pgdumplib.new('test', 'LATIN1')
        entries = dmp.entries
        dmp.entries = [entries[1], entries[2], entries[0]]
        self.assertEqual(dmp.encoding, 'LATIN1')
        dmp.save('build/data/dump.test')

        dmp = pgdumplib.load('build/data/dump.test')
        self.assertEqual(dmp.encoding, 'LATIN1')
Ejemplo n.º 5
0
 def test_no_data(self):
     dmp = pgdumplib.new('test')
     dmp.add_entry(constants.TABLE_DATA, '', 'empty_table', dump_id=5)
     with gzip.open(pathlib.Path(dmp._temp_dir.name) / '5.gz', 'wb') as h:
         h.write(b'')
     dmp.save('build/data/dump.test')
     dmp = pgdumplib.load('build/data/dump.test')
     data = [line for line in dmp.table_data('', 'empty_table')]
     self.assertEqual(len(data), 0)
Ejemplo n.º 6
0
 def test_invalid_block_type_in_data(self):
     dmp = pgdumplib.new('test')
     dmp.add_entry(constants.TABLE_DATA, '', 'block_table', dump_id=128)
     with gzip.open(pathlib.Path(dmp._temp_dir.name) / '128.gz', 'wb') as h:
         h.write(b'1\t\1\t\1\n')
     with mock.patch('pgdumplib.constants.BLK_DATA', b'\x02'):
         dmp.save('build/data/dump.test')
     with self.assertRaises(RuntimeError):
         pgdumplib.load('build/data/dump.test')
Ejemplo n.º 7
0
    def test_invalid_data_type(self):
        dmp = pgdumplib.new('test')
        dmp.add_entry('bad', 'entry_desc', constants.SECTION_DATA, None,
                      'INVALID')
        with gzip.open(pathlib.Path(dmp._temp_dir.name) / '4.gz',
                       'wb') as handle:
            handle.write(b'BADDATASHOULDBLOWUPHARD')

        with self.assertRaises(ValueError):
            dmp.save('build/data/dump.test')
Ejemplo n.º 8
0
    def test_runtime_error_when_pos_not_set(self):
        dmp = pgdumplib.new('test')
        dmp.add_entry(constants.TABLE_DATA, 'public', 'table', dump_id=32)
        with gzip.open(pathlib.Path(dmp._temp_dir.name) / '32.gz', 'wb') as h:
            h.write(b'1\t\1\t\1\n')

        with mock.patch('pgdumplib.constants.K_OFFSET_POS_SET', 9):
            dmp.save('build/data/dump.test')

        with self.assertRaises(RuntimeError):
            pgdumplib.load('build/data/dump.test')
Ejemplo n.º 9
0
    def test_dump_id_mismatch_in_data(self):
        dmp = pgdumplib.new('test')
        dmp.add_entry(constants.TABLE_DATA, '', 'block_table', dump_id=1024)
        with gzip.open(pathlib.Path(dmp._temp_dir.name) / '1024.gz',
                       'wb') as handle:
            handle.write(b'1\t\1\t\1\n')
        dmp.save('build/data/dump.test')

        with mock.patch('pgdumplib.dump.Dump._read_block_header') as rbh:
            rbh.return_value = constants.BLK_DATA, 2048
            with self.assertRaises(RuntimeError):
                pgdumplib.load('build/data/dump.test')
Ejemplo n.º 10
0
 def __init__(self, args):
     self._acls = {}
     self._args = args
     self._dependencies = {}
     self._dump_id = None
     self._first_avail_id = None
     self._inventory = {}
     self._objects = 0
     self._processed = set({})
     self._project_path = pathlib.Path(args.project)
     self._project = self._read_project_file()
     self._reverse_lookup = {}
     self._dump = pgdumplib.new(self._project.name, self._project.encoding)
Ejemplo n.º 11
0
 def test_empty_save_does_not_err(self):
     dump = pgdumplib.new('test', 'UTF8')
     dump.save('build/data/dump.test')
     test_file = pathlib.Path('build/data/dump.test')
     self.assertTrue(test_file.exists())
     test_file.unlink()
Ejemplo n.º 12
0
 def test_empty_dump_has_base_entries(self):
     dump = pgdumplib.new('test', 'UTF8')
     self.assertEqual(len(dump.entries), 3)
Ejemplo n.º 13
0
 def test_invalid_section(self):
     dmp = pgdumplib.new('test')
     with self.assertRaises(ValueError):
         dmp.add_entry('bad', 'block_table', 'INVALID')
Ejemplo n.º 14
0
 def test_used_dump_id(self):
     dmp = pgdumplib.new('test')
     with self.assertRaises(ValueError):
         dmp.add_entry(constants.TABLE, '', 'table', dump_id=1)
Ejemplo n.º 15
0
    def test_dump_expectations(self):
        dmp = pgdumplib.new('test', 'UTF8')
        database = dmp.add_entry(
            desc=constants.DATABASE,
            tag='postgres',
            owner='postgres',
            defn="""\
            CREATE DATABASE postgres
              WITH TEMPLATE = template0
                   ENCODING = 'UTF8'
                   LC_COLLATE = 'en_US.utf8'
                   LC_CTYPE = 'en_US.utf8';""",
            drop_stmt='DROP DATABASE postgres')

        dmp.add_entry(
            constants.COMMENT,
            tag='DATABASE postgres',
            owner='postgres',
            defn="""\
            COMMENT ON DATABASE postgres
                 IS 'default administrative connection database';""",
            dependencies=[database.dump_id])

        example = dmp.add_entry(
            constants.TABLE, 'public', 'example', 'postgres',
            'CREATE TABLE public.example (\
              id UUID NOT NULL PRIMARY KEY, \
              created_at TIMESTAMP WITH TIME ZONE, \
              value TEXT NOT NULL);',
            'DROP TABLE public.example')

        columns = 'id', 'created_at', 'value'

        fake = faker.Faker()
        fake.add_provider(date_time)

        rows = [
            (uuid.uuid4(), fake.date_time(tzinfo=tz.tzutc()), 'foo'),
            (uuid.uuid4(), fake.date_time(tzinfo=tz.tzutc()), 'bar'),
            (uuid.uuid4(), fake.date_time(tzinfo=tz.tzutc()), 'baz'),
            (uuid.uuid4(), fake.date_time(tzinfo=tz.tzutc()), 'qux')
        ]

        with dmp.table_data_writer(example, columns) as writer:
            for row in rows:
                writer.append(*row)

        row = (uuid.uuid4(), fake.date_time(tzinfo=tz.tzutc()), None)
        rows.append(row)

        # Append a second time to get same writer
        with dmp.table_data_writer(example, columns) as writer:
            writer.append(*row)

        dmp.save('build/data/dump.test')

        test_file = pathlib.Path('build/data/dump.test')
        self.assertTrue(test_file.exists())

        dmp = pgdumplib.load(test_file, converters.SmartDataConverter)
        entry = dmp.get_entry(database.dump_id)
        self.assertEqual(entry.desc, 'DATABASE')
        self.assertEqual(entry.owner, 'postgres')
        self.assertEqual(entry.tag, 'postgres')
        values = [row for row in dmp.table_data('public', 'example')]
        self.assertListEqual(values, rows)
Ejemplo n.º 16
0
 def test_pgdumplib_new(self):
     dmp = pgdumplib.new('test', 'UTF8', converters.SmartDataConverter)
     self.assertIsInstance(dmp, dump.Dump)
     self.assertIsInstance(dmp._converter, converters.SmartDataConverter)
Ejemplo n.º 17
0
 def test_invalid_desc(self):
     dmp = pgdumplib.new('test')
     with self.assertRaises(ValueError):
         dmp.add_entry('foo', '', 'table')