Exemplo n.º 1
0
    def testSearchLabel(self):
        s1 = cml.SearchLabel(text='foo@bar:baz')
        self.assertEquals(repr(s1),
            "SearchLabel(text='foo@bar:baz', modified=True, index=None)")
        self.assertEquals(s1.format(), 'search foo@bar:baz')
        self.assertEquals(s1.asString(), 'foo@bar:baz')

        s2 = cml.SearchLabel(item = s1.item, modified=False, index=1)
        self.assertEquals(repr(s2),
            "SearchLabel(text='foo@bar:baz', modified=False, index=1)")
        self.assertEquals(s2.format(), 'search foo@bar:baz')
        self.assertEquals(s2.asString(), 'foo@bar:baz')
        self.assertEquals(str(s2), 'foo@bar:baz')
Exemplo n.º 2
0
    def testStartFromScratch(self):
        smf = self.getSystemModel('/fake')

        smf.parse(fileData=['# an initial comment\n'])
        smf.write()
        self.assertEquals(
            file(self.rootDir + '/fake').read(), '# an initial comment\n')

        smf.model.appendOpByName('update', 'foo')
        smf.write()
        self.assertEquals(
            file(self.rootDir + '/fake').read(), '# an initial comment\n'
            'update foo\n')

        smf.model.appendOp(cml.SearchLabel('a@b:c'))
        smf.write()
        self.assertEquals(
            file(self.rootDir + '/fake').read(), '# an initial comment\n'
            'update foo\n'
            'search a@b:c\n')

        smf.write('/asdf')
        self.assertEquals(
            file(self.rootDir + '/asdf').read(), '# an initial comment\n'
            'update foo\n'
            'search a@b:c\n')
        self.assertEquals(
            stat.S_IMODE(os.stat(self.rootDir + '/asdf')[stat.ST_MODE]), 0644)

        os.chmod(self.rootDir + '/asdf', 0640)
        smf.write('/asdf')
        self.assertEquals(
            stat.S_IMODE(os.stat(self.rootDir + '/asdf')[stat.ST_MODE]), 0640)
Exemplo n.º 3
0
 def testParseWrite(self):
     fileData = '\n'.join((
         '# Initial comment',
         'search group-foo=a@b:c/1-1-1',
         '# comment 2',
         'update foo #disappearing act',
         '# comment 3',
         'install bar==a@b:c/1-1-1',
         '# comment 4',
         'patch baz',
         '# comment 5',
         'erase blah',
         '# comment 6',
         '',
     ))
     file(self.rootDir + '/real', 'w').write(fileData)
     smf = self.getSystemModel('/real')
     self.assertEquals(smf.model.format(), fileData)
     smf.write('/copy')
     self.assertEquals(file(self.rootDir + '/copy').read(), fileData)
     smf.model.modelOps[1].modified = True
     modFileData = fileData.replace(' #disappearing act', '')
     self.assertEquals(smf.model.format(), modFileData)
     smf.model.appendOp(cml.UpdateTroveOperation('newtrove'))
     modFileData = modFileData.replace('erase blah\n',
                                       'erase blah\nupdate newtrove\n')
     self.assertEquals(smf.model.format(), modFileData)
     smf.model.appendOp(cml.SearchLabel('d@e:f'))
     modFileData = modFileData.replace('update newtrove\n',
                                       'update newtrove\nsearch d@e:f\n')
     self.assertEquals(smf.model.format(), modFileData)
Exemplo n.º 4
0
    def testParseWrite(self):
        fileData = '\n'.join((
            '# Initial comment',
            'search group-foo=a@b:c/1-1-1',
            '# comment 2',
            'offer optional',
            'update foo #disappearing act',
            '# comment 3',
            'install bar',
            '# comment 4',
            'patch baz',
            '# comment 5',
            'erase blah',
            '# comment 6',
            'include cml-inc',
            '# comment 7',
            'version 1.0 # ensure it does not move',
            '',
        ))
        smf = self.getCML()
        smf.parse(fileData=[x+'\n' for x in fileData.split('\n')][:-1])
        self.assertEquals(smf.format(), fileData)
        self.assertEquals(str(smf.modelOps[3].getLocation(
                                  smf.modelOps[3].item[0])), '7:bar')
        self.assertEquals(smf.modelOps[3].format(), 'install bar')
        smf.modelOps[2].modified=True
        self.assertEquals(smf.modified(), True)
        modFileData = fileData.replace(' #disappearing act', '')
        self.assertEquals(smf.format(), modFileData)
        smf.appendOp(cml.UpdateTroveOperation('newtrove'))
        modFileData = modFileData.replace('include cml-inc\n',
                                          'include cml-inc\nupdate newtrove\n')
        self.assertEquals(smf.format(), modFileData)
        smf.appendOp(cml.SearchLabel('d@e:f'))
        modFileData = modFileData.replace('update newtrove\n',
                                          'update newtrove\nsearch d@e:f\n')
        self.assertEquals(smf.format(), modFileData)

        mockFile = mock.MockObject()
        smf.write(mockFile)
        mockFile.write._mock.assertCalled(modFileData)

        smf.parse(fileData=[x+'\n' for x in fileData.split('\n')][:-1],
                  context='foo')
        self.assertEquals(str(smf.modelOps[3].getLocation(
                                    smf.modelOps[3].item[0])),
                          'foo:7:bar')
        self.assertEquals(smf.modelOps[3].format(), 'install bar')
Exemplo n.º 5
0
    def testCMRepresentation(self):
        m = self.getCM()
        gs = cml.SearchTrove(text='group-foo=g@h:i',
            modified=False, index=1)
        m.appendOp(gs)
        gl = cml.SearchLabel(text='j@k:l', modified=False, index=2)
        m.appendOp(gl)
        nop = cml.NoOperation('# comment', modified=False, index=3)
        m.appendNoOperation(nop)
        at = cml.UpdateTroveOperation(text=['bar', 'blah'],
            modified=False, index=4)
        m.appendOp(at)
        rt = cml.EraseTroveOperation(text='baz',
            modified=False, index=5)
        m.appendOp(rt)
        inc = cml.IncludeOperation(text='cml-foo', modified=False, index=6)
        m.appendOp(inc)

        self.assertEquals(m.getVersion(), None)
        ver = cml.VersionOperation('2.0', modified=False, index=7)
        m.setVersion(ver)
        self.assertEquals(str(m.getVersion()), '2.0')

        self.assertEquals(len(m.modelOps), 5)
        self.assertEquals(m.modelOps[0], gs)
        self.assertEquals(m.modelOps[1], gl)
        self.assertEquals(m.modelOps[2], at)
        self.assertEquals(m.modelOps[3], rt)
        self.assertEquals(m.modelOps[4], inc)
        self.assertEquals(m.noOps[0], nop)
        self.assertEquals(len(m.noOps), 1)
        self.assertEquals(sorted(m.indexes.keys()), [1,2,3,4,5,6,7])
        self.assertEquals(m.indexes[1], [gs])
        self.assertEquals(m.indexes[2], [gl])
        self.assertEquals(m.indexes[3], [nop])
        self.assertEquals(m.indexes[4], [at])
        self.assertEquals(m.indexes[5], [rt])
        self.assertEquals(m.indexes[6], [inc])
        self.assertEquals(m.indexes[7], [ver])
        self.assertEquals(m.modified(), False)
Exemplo n.º 6
0
    def testStartFromScratch(self):
        smf = self.getCML()

        smf.appendNoOpByText('# an initial comment')
        self.assertEquals(smf.format(),
            '# an initial comment\n')

        smf.appendOpByName('update', 'foo')
        self.assertEquals(smf.format(),
            '# an initial comment\n'
            'update foo\n')

        smf.appendOp(cml.SearchLabel('a@b:c'))
        self.assertEquals(smf.format(),
            '# an initial comment\n'
            'update foo\n'
            'search a@b:c\n')

        smf.setVersion(cml.VersionOperation('1.0'))
        self.assertEquals(smf.format(),
            '# an initial comment\n'
            'version 1.0\n'
            'update foo\n'
            'search a@b:c\n')

        smf.appendOpByName('offer', 'optional')
        self.assertEquals(smf.format(),
            '# an initial comment\n'
            'version 1.0\n'
            'update foo\n'
            'search a@b:c\n'
            'offer optional\n')

        smf.appendOpByName('include', 'cml-inc')
        self.assertEquals(smf.format(),
            '# an initial comment\n'
            'version 1.0\n'
            'update foo\n'
            'search a@b:c\n'
            'offer optional\n'
            'include cml-inc\n')

        smf.appendNoOpByText('# a trailing comment', index=999)
        self.assertEquals(smf.format(),
            '# an initial comment\n'
            'version 1.0\n'
            'update foo\n'
            'search a@b:c\n'
            'offer optional\n'
            'include cml-inc\n'
            '# a trailing comment\n')

        smf.appendNoOpByText('# another trailing comment', index=999)
        self.assertEquals(smf.format(),
            '# an initial comment\n'
            'version 1.0\n'
            'update foo\n'
            'search a@b:c\n'
            'offer optional\n'
            'include cml-inc\n'
            '# a trailing comment\n'
            '# another trailing comment\n')

        smf2 = smf.copy()
        self.assertEquals(smf.format(), smf2.format())
Exemplo n.º 7
0
    def testRefreshVersionSnapshots(self):
        m = self.getCM()

        mockClient = mock.MockObject()
        self.mock(conaryclient, 'ConaryClient', mockClient)
        repos = mockClient().getRepos()
        repos.findTroves._mock.setDefaultReturn(
            {('group-foo', 'g@h:i', None):
                 [('group-foo', 
                   versions.VersionFromString('/g@h:i/1.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('group-foo', 'g@h:i/1.0-1-1', None):
                 [('group-foo',
                   versions.VersionFromString('/g@h:i/1.0-1-1'),
                   deps.parseFlavor('foo'))],
             ('bar', 'g@h:i', None):
                 [('bar', 
                   versions.VersionFromString('/g@h:i/2.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('bar', 'g@h:i/2.0-1-1', None):
                 [('bar',
                   versions.VersionFromString('/g@h:i/2.0-1-1'),
                   deps.parseFlavor('foo'))],
             ('pinned', 'g@h:i', None):
                 [('pinned', 
                   versions.VersionFromString('/g@h:i/2.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('pinned', 'g@h:i/2.0-1-1', None):
                 [('pinned',
                   versions.VersionFromString('/g@h:i/2.0-1-1'),
                   deps.parseFlavor('foo'))],
             ('cml-inc', 'g@h:i', None):
                 [('cml-inc', 
                   versions.VersionFromString('/g@h:i/1.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('cml-inc', 'g@h:i/1.0-1-1', None):
                 [('cml-inc',
                   versions.VersionFromString('/g@h:i/1.0-1-1'),
                   deps.parseFlavor('foo'))],
            }
        )

        gs = cml.SearchTrove(text='group-foo=g@h:i/1.0-1-1',
            modified=False, index=1)
        m.appendOp(gs)
        gl = cml.SearchLabel(text='j@k:l', modified=False, index=2)
        m.appendOp(gl)
        up = cml.UpdateTroveOperation(text='bar=g@h:i/2.0-1-1',
            modified=False, index=3)
        m.appendOp(up)
        pi = cml.InstallTroveOperation(text='pinned==g@h:i/2.0-1-1',
            modified=False, index=4)
        m.appendOp(pi)
        inc = cml.IncludeOperation(text='cml-inc=g@h:i/1.0-1-1',
            modified=False, index=5)
        m.appendOp(inc)

        self.assertEquals(m.modified(), False)
        self.assertEquals([x.format() for x in m.modelOps],
            ['search group-foo=g@h:i/1.0-1-1',
             'search j@k:l',
             'update bar=g@h:i/2.0-1-1',
             'install pinned==g@h:i/2.0-1-1',
             'include cml-inc=g@h:i/1.0-1-1'])
        m.refreshVersionSnapshots()
        self.assertEquals(m.modified(), True)
        self.assertEquals([x.format() for x in m.modelOps],
            ['search group-foo=g@h:i/1.0-1-2',
             'search j@k:l',
             'update bar=g@h:i/2.0-1-2',
             'install pinned==g@h:i/2.0-1-1',
             'include cml-inc=g@h:i/1.0-1-2'])

        # and now, if it doesn't change:
        repos.findTroves._mock.setDefaultReturn(
            {('group-foo', 'g@h:i', None):
                 [('group-foo', 
                   versions.VersionFromString('/g@h:i/1.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('group-foo', 'g@h:i/1.0-1-2', None):
                 [('group-foo',
                   versions.VersionFromString('/g@h:i/1.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('bar', 'g@h:i', None):
                 [('bar', 
                   versions.VersionFromString('/g@h:i/2.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('bar', 'g@h:i/2.0-1-2', None):
                 [('bar',
                   versions.VersionFromString('/g@h:i/2.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('pinned', 'g@h:i', None):
                 [('pinned', 
                   versions.VersionFromString('/g@h:i/2.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('pinned', 'g@h:i/2.0-1-1', None):
                 [('pinned',
                   versions.VersionFromString('/g@h:i/2.0-1-1'),
                   deps.parseFlavor('foo'))],
             ('cml-inc', 'g@h:i', None):
                 [('cml-inc', 
                   versions.VersionFromString('/g@h:i/1.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('cml-inc', 'g@h:i/1.0-1-2', None):
                 [('cml-inc',
                   versions.VersionFromString('/g@h:i/1.0-1-2'),
                   deps.parseFlavor('foo'))],
            }
        )
        m.refreshVersionSnapshots()
        self.assertEquals(m.modified(), True)
        self.assertEquals([x.format() for x in m.modelOps],
            ['search group-foo=g@h:i/1.0-1-2',
             'search j@k:l',
             'update bar=g@h:i/2.0-1-2',
             'install pinned==g@h:i/2.0-1-1',
             'include cml-inc=g@h:i/1.0-1-2'])

        # Old group is missing
        findtroves = {
             ('group-foo', 'g@h:i', None):
                 [('group-foo', 
                   versions.VersionFromString('/g@h:i/1.0-1-2'),
                   deps.parseFlavor('foo'))],
             #('group-foo', 'g@h:i/1.0-1-2', None):
             ('bar', 'g@h:i', None):
                 [('bar', 
                   versions.VersionFromString('/g@h:i/2.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('bar', 'g@h:i/2.0-1-2', None):
                 [('bar',
                   versions.VersionFromString('/g@h:i/2.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('pinned', 'g@h:i', None):
                 [('pinned', 
                   versions.VersionFromString('/g@h:i/2.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('pinned', 'g@h:i/2.0-1-1', None):
                 [('pinned',
                   versions.VersionFromString('/g@h:i/2.0-1-1'),
                   deps.parseFlavor('foo'))],
             ('cml-inc', 'g@h:i', None):
                 [('cml-inc', 
                   versions.VersionFromString('/g@h:i/1.0-1-2'),
                   deps.parseFlavor('foo'))],
             ('cml-inc', 'g@h:i/1.0-1-2', None):
                 [('cml-inc',
                   versions.VersionFromString('/g@h:i/1.0-1-2'),
                   deps.parseFlavor('foo'))],
            }
        repos.findTroves._mock.setDefaultReturn(findtroves)
        m.refreshVersionSnapshots()
        self.assertEquals(m.modified(), True)
        self.assertEquals([x.format() for x in m.modelOps],
            ['search group-foo=g@h:i/1.0-1-2',
             'search j@k:l',
             'update bar=g@h:i/2.0-1-2',
             'install pinned==g@h:i/2.0-1-1',
             'include cml-inc=g@h:i/1.0-1-2'])

        # New version is missing
        del findtroves[('group-foo', 'g@h:i', None)]
        err = self.assertRaises(TroveNotFound, m.refreshVersionSnapshots)
        self.assertEquals(str(err), "Trove not found: group-foo=g@h:i")
        del findtroves[('bar', 'g@h:i', None)]
        err = self.assertRaises(TroveNotFound, m.refreshVersionSnapshots)
        self.assertEquals(str(err),
                "2 troves not found:\nbar=g@h:i\ngroup-foo=g@h:i")