Example #1
0
 def test_receive_replays_and_updates_metadata(self):
     basedir = get_transport(self.setup_memory()).clone('path')
     basedir.create_prefix()
     ui = self.get_test_ui()
     # two journals exist from this simple operation - 0 and 1, but 
     # need 3, as new clones start with 0
     mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
     basedir.create_prefix()
     basedir.mkdir('dir1')
     basedir.mkdir('dir2')
     basedir.put_bytes('abc', '1234567890\n')
     basedir.put_bytes('dir1/def', 'abcdef')
     mirror.finish_change()
     mirror.start_change()
     basedir.put_bytes('dada', '123456789a\n')
     mirror.finish_change()
     clonedir = basedir.clone('../clone')
     clonedir.create_prefix()
     clone = mirrorset.initialise(clonedir, 'myname', clonedir, ui)
     clone.cancel_change()
     clone.receive(mirror)
     mirrormeta = mirror._get_metadata()
     metadata = clone._get_metadata()
     self.assertEqual('2', metadata.get('metadata', 'latest'))
     self.assertEqual(
         mirrormeta.get('metadata', 'timestamp'),
         metadata.get('metadata', 'timestamp'))
     # check we got a file from each journal
     self.assertEqual('123456789a\n', clonedir.get_bytes('dada'))
     self.assertEqual('1234567890\n', clonedir.get_bytes('abc'))
     # And the journals should be identical.
     mirrorjournal = mirror._journaldir()
     clonejournal = clone._journaldir()
     self.assertEqual(mirrorjournal.get_bytes('1'), clonejournal.get_bytes('1'))
     self.assertEqual(mirrorjournal.get_bytes('2'), clonejournal.get_bytes('2'))
Example #2
0
 def test_checks_when_there_is_a_keyring(self):
     basedir = get_transport(self.setup_memory()).clone('path')
     basedir.create_prefix()
     ui = self.get_test_ui()
     mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
     mirror.gpg_strategy = bzrgpg.LoopbackGPGStrategy(None)
     t = basedir.clone('.lmirror/sets/myname')
     t.put_bytes('lmirror.gpg', '')
     mirror.finish_change()
     metadatadir = mirror._metadatadir()
     self.assertEqual(
         "-----BEGIN PSEUDO-SIGNED CONTENT-----\n" +
         metadatadir.get_bytes('journals/1') +
         "-----END PSEUDO-SIGNED CONTENT-----\n",
         metadatadir.get_bytes('journals/1.sig'))
     clonedir = basedir.clone('../clone')
     clonedir.create_prefix()
     clone = mirrorset.initialise(clonedir, 'myname', clonedir, ui)
     clone.cancel_change()
     clone.gpgv_strategy = gpg.TestGPGVStrategy([metadatadir.get_bytes('journals/1')])
     clone.receive(mirror)
     metadata = clone._get_metadata()
     self.assertEqual('1', metadata.get('metadata', 'latest'))
     self.assertEqual(
         "-----BEGIN PSEUDO-SIGNED CONTENT-----\n" +
         metadatadir.get_bytes('journals/1') +
         "-----END PSEUDO-SIGNED CONTENT-----\n",
         clone._metadatadir().get_bytes('journals/1.sig'))
Example #3
0
    def test_second_set_can_be_created(self):
        basedir = get_transport(self.setup_memory()).clone('path')
        basedir.create_prefix()
        ui = self.get_test_ui()
        mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
        mirror = mirrorset.initialise(basedir, 'myname2', basedir, ui)
        t = basedir.clone('.lmirror/sets/myname2')
        self.assertEqual('1\n', t.get_bytes('format'))
        self.assertThat(t.get_bytes('set.conf'), DocTestMatches("""[set]
content_root = .
"""))
Example #4
0
    def test_open_wrong_format(self):
        basedir = get_transport(self.setup_memory()).clone('path')
        basedir.create_prefix()
        ui = self.get_test_ui()
        mirrorset.initialise(basedir, 'myname', basedir, ui)
        t = basedir.clone('.lmirror/sets/myname')
        self.assertEqual('1\n', t.get_bytes('format'))
        t.put_bytes('format', '2\n')
        self.assertThat(t.get_bytes('set.conf'), DocTestMatches("""[set]
content_root = .
"""))   
        self.assertRaises(ValueError, mirrorset.MirrorSet, basedir, 'myname', ui)
Example #5
0
    def test_include_excludes_honoured(self):
        basedir = get_transport(self.setup_memory()).clone('path')
        basedir.create_prefix()
        ui = self.get_test_ui()
        mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
        basedir.create_prefix()
        basedir.mkdir('dir1')
        basedir.mkdir('dir2')
        basedir.put_bytes('abc', '1234567890\n')
        basedir.put_bytes('dir2/included', '1234567890\n')
        basedir.put_bytes('dir1/def', 'abcdef')
        mirror.includes = ['included']
        mirror.excludes = ['dir2/', 'dir1']
        mirror.filter_programs = []
        mirror.finish_change()
        t = basedir.clone('.lmirror/metadata/myname')
        self.assertThat(t.get_bytes('metadata.conf'), DocTestMatches("""[metadata]
basis = 0
latest = 1
timestamp = ...
updating = False

""", ELLIPSIS))
        self.assertThat(t.get_bytes('journals/1'), DocTestMatches("""l-mirror-journal-2
.lmirror\x00new\x00dir\x00.lmirror/sets\x00new\x00dir\x00.lmirror/sets/myname\x00new\x00dir\x00.lmirror/sets/myname/format\x00new\x00file\x00e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e\x002\x000.000000\x00.lmirror/sets/myname/set.conf\x00new\x00file\x00061df21cf828bb333660621c3743cfc3a3b2bd23\x0023\x000.000000\x00abc\x00new\x00file\x0012039d6dd9a7e27622301e935b6eefc78846802e\x0011\x000.000000\x00dir2\x00new\x00dir\x00dir2/included\x00new\x00file\x0012039d6dd9a7e27622301e935b6eefc78846802e\x0011\x000.000000"""))
Example #6
0
 def test_error_creating_existing_set(self):
     basedir = get_transport(self.setup_memory()).clone('path')
     basedir.create_prefix()
     ui = self.get_test_ui()
     mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
     self.assertRaises(ValueError,
         mirrorset.initialise, basedir, 'myname', basedir, ui)
Example #7
0
    def test_updating_finishes(self):
        base = self.setup_memory()
        root = base + 'path/myname'
        t = get_transport(base)
        t = t.clone('path')
        contentdir = t
        contentdir.create_prefix()
        contentdir.mkdir('dir1')
        contentdir.mkdir('dir2')
        contentdir.put_bytes('abc', '1234567890\n')
        contentdir.put_bytes('dir1/def', 'abcdef')
        ui, cmd = self.get_test_ui_and_cmd((root,))
        mirror = mirrorset.initialise(t, 'myname', t, ui)
        self.assertEqual(0, cmd.execute())
        t = t.clone('.lmirror/metadata/myname')
        self.assertThat(t.get_bytes('metadata.conf'), DocTestMatches("""[metadata]
basis = 0
latest = 1
timestamp = ...
updating = False

""", ELLIPSIS))
        self.assertThat(t.get_bytes('journals/0'), DocTestMatches("""l-mirror-journal-2
"""))
        self.assertThat(t.get_bytes('journals/1'), DocTestMatches("""l-mirror-journal-2
.lmirror\x00new\x00dir\x00.lmirror/sets\x00new\x00dir\x00.lmirror/sets/myname\x00new\x00dir\x00.lmirror/sets/myname/format\x00new\x00file\x00e5fa44f2b31c1fb553b6021e7360d07d5d91ff5e\x002\x000.000000\x00.lmirror/sets/myname/set.conf\x00new\x00file\x00061df21cf828bb333660621c3743cfc3a3b2bd23\x0023\x000.000000\x00abc\x00new\x00file\x0012039d6dd9a7e27622301e935b6eefc78846802e\x0011\x000.000000\x00dir1\x00new\x00dir\x00dir1/def\x00new\x00file\x001f8ac10f23c5b5bc1167bda84b833e5c057a77d2\x006\x000.000000\x00dir2\x00new\x00dir"""))
Example #8
0
 def test_finish_change_not_updating_error(self):
     basedir = get_transport(self.setup_memory()).clone('path')
     basedir.create_prefix()
     ui = self.get_test_ui()
     mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
     mirror.finish_change()
     self.assertRaises(ValueError, mirror.finish_change)
Example #9
0
 def test_set_server(self):
     basedir = get_transport(self.setup_memory()).clone('path')
     basedir.create_prefix()
     ui = self.get_test_ui()
     mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
     mirror.finish_change()
     mirror.set_server('foo/bar')
     self.assertEqual('foo/bar', mirror.get_server())
     mirror.set_server(None)
     self.assertEqual(None, mirror.get_server())
Example #10
0
 def test_start_change_not_updating_starts_change(self):
     basedir = get_transport(self.setup_memory()).clone('path')
     basedir.create_prefix()
     ui = self.get_test_ui()
     mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
     mirror.finish_change()
     mirror.start_change()
     # We know finish_change errors if a change isn't open, so it working is
     # sufficient.
     mirror.finish_change()
Example #11
0
 def test_finish_change_no_change_no_new_journal(self):
     basedir = get_transport(self.setup_memory()).clone('path')
     basedir.create_prefix()
     ui = self.get_test_ui()
     mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
     mirror.finish_change()
     mirror.start_change()
     mirror.finish_change()
     self.assertEqual('1', mirror._get_metadata().get('metadata', 'latest'))
     self.assertEqual(('rest', 'No changes found in mirrorset.'),
         ui.outputs[-1])
Example #12
0
 def test_mirrors_incremental(self):
     base = self.setup_memory()
     source = base + 'path/myname'
     target = base + 'clone'
     t = get_transport(source).clone('..')
     t.create_prefix()
     t.mkdir('something blue')
     clone_t = t.clone('../clone')
     clone_t.create_prefix()
     ui, cmd = self.get_test_ui_and_cmd((source, target))
     mirror = mirrorset.initialise(t, 'myname', t, ui)
     mirror.finish_change()
     target = mirrorset.initialise(clone_t, 'myname', clone_t, ui)
     target.cancel_change()
     target.receive(mirror)
     mirror.start_change()
     t.mkdir('something borrowed')
     mirror.finish_change()
     self.assertEqual(0, cmd.execute())
     self.assertTrue(clone_t.has('something borrowed'))
Example #13
0
 def run(self):
     transport = self.ui.arguments['mirror_set'][0]
     base = transport.clone('..')
     name = base.relpath(transport.base)
     if not self.ui.arguments['content_root']:
         content_root = base
     else:
         content_root = self.ui.arguments['content_root'][0]
     mirror = mirrorset.initialise(base, name, content_root, self.ui)
     if not self.ui.options.empty:
         mirror.finish_change()
     return 0
Example #14
0
 def test_mirrors_new(self):
     base = self.setup_memory()
     source = base + 'path/myname'
     target = base + 'clone'
     t = get_transport(source).clone('..')
     t.create_prefix()
     t.mkdir('something blue')
     ui, cmd = self.get_test_ui_and_cmd((source, target))
     mirror = mirrorset.initialise(t, 'myname', t, ui)
     mirror.finish_change()
     self.assertEqual(0, cmd.execute())
     self.assertTrue(t.has('../clone/something blue'))
     target = mirrorset.MirrorSet(t.clone('../clone'), 'myname', ui)
Example #15
0
    def test_parse_content_conf(self):
        basedir = get_transport(self.setup_memory()).clone('path')
        basedir.create_prefix()
        ui = self.get_test_ui()
        mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
        t = basedir.clone('.lmirror/sets/myname')
        t.put_bytes('content.conf', """include a regex
exclude another regex
# a comment
""")
        mirror._parse_content_conf()
        self.assertEqual(['another regex'], mirror.excludes)
        self.assertEqual(['a regex'], mirror.includes)
Example #16
0
 def test_updating_errors(self):
     base = self.setup_memory()
     t = get_transport(base)
     t = t.clone('path')
     t.create_prefix()
     root = t.base + 'myname'
     ui, cmd = self.get_test_ui_and_cmd((root,))
     mirror = mirrorset.initialise(t, 'myname', t, UI())
     self.assertEqual(3, cmd.execute())
     self.assertEqual(1, len(ui.outputs))
     self.assertEqual('error', ui.outputs[0][0])
     self.assertThat(ui.outputs[0][1],
         MatchesException(ValueError('Changeset already open')))
Example #17
0
 def test_open_on_server(self):
     basedir = get_transport(self.setup_memory()).clone('path')
     basedir.create_prefix()
     ui = self.get_test_ui()
     serve = server.Server(ui)
     serve.start(port=0)
     try:
         source_mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
         serve.add(source_mirror)
         server_transport = get_transport(serve.addresses[0])
         opened_mirror = mirrorset.MirrorSet(server_transport, 'myname', ui)
         self.assertIsInstance(opened_mirror, mirrorset.HTTPMirrorSet)
     finally:
         serve.stop()
Example #18
0
    def test_creates_metadata_dir(self):
        basedir = get_transport(self.setup_memory()).clone('path')
        basedir.create_prefix()
        ui = self.get_test_ui()
        mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
        t = basedir.clone('.lmirror/metadata/myname')
        self.assertEqual('1\n', t.get_bytes('format'))
        self.assertThat(t.get_bytes('metadata.conf'), DocTestMatches("""[metadata]
basis = 0
latest = 0
timestamp = 0
updating = True
""", ELLIPSIS))
        self.assertThat(t.get_bytes('journals/0'), DocTestMatches("""l-mirror-journal-2
"""))
Example #19
0
 def run(self):
     source_transport = self.ui.arguments['source_mirror'][0]
     source_base = source_transport.clone('..')
     name = source_base.relpath(source_transport.base)
     target_base = self.ui.arguments['target_mirror'][0]
     source = mirrorset.MirrorSet(source_base, name, self.ui)
     try:
         target = mirrorset.MirrorSet(target_base, name, self.ui)
     except ValueError:
         # No mirror there yet
         target = mirrorset.initialise(target_base, name,
             target_base.clone(source.content_root_path()), self.ui)
         target.cancel_change()
     target.receive(source)
     return 0
Example #20
0
 def test_signs_when_there_is_a_keyring(self):
     basedir = get_transport(self.setup_memory()).clone('path')
     basedir.create_prefix()
     ui = self.get_test_ui()
     mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
     mirror.gpg_strategy = bzrgpg.LoopbackGPGStrategy(None)
     t = basedir.clone('.lmirror/sets/myname')
     t.put_bytes('lmirror.gpg', '')
     mirror.finish_change()
     metadatadir = mirror._metadatadir()
     self.assertEqual(
         "-----BEGIN PSEUDO-SIGNED CONTENT-----\n" +
         metadatadir.get_bytes('journals/1') +
         "-----END PSEUDO-SIGNED CONTENT-----\n",
         metadatadir.get_bytes('journals/1.sig'))
Example #21
0
 def test_set_port(self):
     base = self.setup_memory()
     root = base + 'path/myname'
     root_t = get_transport(base)
     contentdir = root_t.clone('path')
     contentdir.create_prefix()
     mirror = mirrorset.initialise(contentdir, 'myname', contentdir, UI())
     mirror.finish_change()
     ui, cmd = self.get_test_ui_and_cmd((root,), [('port', 1234)])
     fake_calls = []
     def fake_start(self, port=8080):
         fake_calls.append(port)
         raise Exception("All good")
     self.useFixture(MonkeyPatch('l_mirror.server.Server.start', fake_start))
     self.assertEqual(3, cmd.execute())
     self.assertEqual([1234], fake_calls)
Example #22
0
    def test_not_updating_starts(self):
        base = self.setup_memory()
        root = base + 'path/myname'
        t = get_transport(base)
        t = t.clone('path')
        t.create_prefix()
        ui, cmd = self.get_test_ui_and_cmd((root,))
        mirror = mirrorset.initialise(t, 'myname', t, ui)
        mirror.finish_change()
        self.assertEqual(0, cmd.execute())
        t = t.clone('.lmirror/metadata/myname')
        self.assertThat(t.get_bytes('metadata.conf'), DocTestMatches("""[metadata]
basis = 0
latest = 1
timestamp = ...
updating = True

""", ELLIPSIS))
Example #23
0
    def test_finish_change_no_change_recorded(self):
        basedir = get_transport(self.setup_memory()).clone('path')
        basedir.create_prefix()
        ui = self.get_test_ui()
        mirror = mirrorset.initialise(basedir, 'myname', basedir, ui)
        basedir.create_prefix()
        basedir.mkdir('dir1')
        basedir.mkdir('dir2')
        basedir.put_bytes('abc', '1234567890\n')
        basedir.put_bytes('dir1/def', 'abcdef')
        mirror.finish_change(dryrun=True)
        t = basedir.clone('.lmirror/metadata/myname')
        self.assertThat(t.get_bytes('metadata.conf'),
            DocTestMatches("""[metadata]
basis = 0
latest = 0
timestamp = ...
updating = True
""", ELLIPSIS))
Example #24
0
    def test_dry_run_leaves_unfinished(self):
        base = self.setup_memory()
        root = base + 'path/myname'
        t = get_transport(base)
        t = t.clone('path')
        contentdir = t
        contentdir.create_prefix()
        contentdir.mkdir('dir1')
        contentdir.mkdir('dir2')
        contentdir.put_bytes('abc', '1234567890\n')
        contentdir.put_bytes('dir1/def', 'abcdef')
        ui, cmd = self.get_test_ui_and_cmd((root,), [('dryrun', True)])
        mirror = mirrorset.initialise(t, 'myname', t, ui)
        self.assertEqual(0, cmd.execute())
        t = t.clone('.lmirror/metadata/myname')
        self.assertThat(t.get_bytes('metadata.conf'), DocTestMatches("""[metadata]
basis = 0
latest = 0
timestamp = ...
updating = True
""", ELLIPSIS))