Пример #1
0
    def testNssDbGroupHandlerWriteData(self):
        ent = 'foo:x:1000:bar'

        makedb_stdin = self.mox.CreateMock(sys.stdin)
        makedb_stdin.write('.foo %s\n' % ent)
        makedb_stdin.write('=1000 %s\n' % ent)
        makedb_stdin.write('00 %s\n' % ent)

        m = group.GroupMap()
        g = group.GroupMapEntry()
        g.name = 'foo'
        g.gid = 1000
        g.passwd = 'x'
        g.members = ['bar']

        self.failUnless(m.Add(g))

        writer = nssdb.NssDbGroupHandler({
            'makedb': '/bin/false',
            'dir': '/tmp'
        })

        self.mox.ReplayAll()

        writer.WriteData(makedb_stdin, g, 0)
Пример #2
0
    def testVerifyFailure(self):
        # create a map
        m = group.GroupMap()
        e = group.GroupMapEntry()
        e.name = 'foo'
        e.gid = 2000
        self.assertTrue(m.Add(e))

        updater = nssdb.NssDbGroupHandler({
            'dir': self.workdir,
            'makedb': '/usr/bin/makedb'
        })
        written = updater.Write(m)

        self.assertTrue(os.path.exists(updater.temp_cache_filename),
                        'updater.Write() did not create a file')

        # change the cache
        db = btopen(updater.temp_cache_filename)
        del db[db.first()[0]]
        db.sync()
        db.close()

        retval = updater.Verify(written)

        self.assertEqual(False, retval)
        self.assertFalse(
            os.path.exists(os.path.join(updater.temp_cache_filename)))
Пример #3
0
    def testConvertValueToMapEntry(self):
        ent = 'foo:x:1000:bar'
        updater = nssdb.NssDbGroupHandler({})

        gme = updater.ConvertValueToMapEntry(ent)

        self.assertEqual('foo', gme.name)
        self.assertEqual(1000, gme.gid)
        self.assertEqual('x', gme.passwd)
        self.assertEqual(['bar'], gme.members)
Пример #4
0
    def testNssDbGroupHandlerWrite(self):
        ent = 'foo:x:1000:bar'

        makedb_stdin = self.mox.CreateMock(sys.stdin)
        makedb_stdin.write('.foo %s\n' % ent)
        makedb_stdin.write('=1000 %s\n' % ent)
        makedb_stdin.write('00 %s\n' % ent)
        makedb_stdin.close()

        makedb_stdout = self.mox.CreateMock(sys.stdout)
        makedb_stdout.read().AndReturn('')
        makedb_stdout.close()

        m = group.GroupMap()
        g = group.GroupMapEntry()
        g.name = 'foo'
        g.gid = 1000
        g.passwd = 'x'
        g.members = ['bar']
        g.Verify()
        self.failUnless(m.Add(g))

        self.mox.StubOutWithMock(select, 'select')
        select.select([makedb_stdout], (), (), 0).AndReturn(([37], [], []))
        select.select([makedb_stdout], (), (), 0).AndReturn(([], [], []))

        def SpawnMakeDb():
            makedb = MakeDbDummy()
            makedb.stdin = makedb_stdin
            makedb.stdout = makedb_stdout
            return makedb

        writer = nssdb.NssDbGroupHandler({
            'makedb': '/usr/bin/makedb',
            'dir': self.workdir
        })
        writer._SpawnMakeDb = SpawnMakeDb
        self.mox.ReplayAll()

        writer.Write(m)

        tmpgroup = os.path.join(self.workdir, 'group.db')
        self.failIf(os.path.exists(tmpgroup))
        # just clean it up, Write() doesn't Commit()
        writer._Rollback()
Пример #5
0
    def testVerifyFailure(self):
        # Can't test if no makedb
        if not os.path.exists('/usr/bin/makedb'):
            raise TestSkipped('no /usr/bin/makedb')
        # Hide the warning that we expect to get

        class TestFilter(logging.Filter):
            def filter(self, record):
                return not record.msg.startswith(
                    'verify failed: %d keys missing')

        fltr = TestFilter()
        logging.getLogger('NssDbGroupHandler').addFilter(fltr)

        # create a map
        m = group.GroupMap()
        e = group.GroupMapEntry()
        e.name = 'foo'
        e.gid = 2000
        self.failUnless(m.Add(e))

        updater = nssdb.NssDbGroupHandler({
            'dir': self.workdir,
            'makedb': '/usr/bin/makedb'
        })
        written = updater.Write(m)

        self.failUnless(os.path.exists(updater.temp_cache_filename),
                        'updater.Write() did not create a file')

        # change the cache
        db = bsddb.btopen(updater.temp_cache_filename)
        del db[db.first()[0]]
        db.sync()
        db.close()

        retval = updater.Verify(written)

        self.failUnlessEqual(False, retval)
        self.failIf(os.path.exists(os.path.join(updater.temp_cache_filename)))
        # no longer hide this message
        logging.getLogger('NssDbGroupHandler').removeFilter(fltr)
Пример #6
0
    def testVerify(self):
        # create a map
        m = group.GroupMap()
        e = group.GroupMapEntry()
        e.name = 'foo'
        e.gid = 2000
        self.failUnless(m.Add(e))

        updater = nssdb.NssDbGroupHandler({
            'dir': self.workdir,
            'makedb': '/usr/bin/makedb'
        })
        written = updater.Write(m)

        self.failUnless(os.path.exists(updater.temp_cache_filename),
                        'updater.Write() did not create a file')

        retval = updater.Verify(written)

        self.failUnlessEqual(True, retval)
        os.unlink(updater.temp_cache_filename)
Пример #7
0
    def testIsMapPrimaryKey(self):
        updater = nssdb.NssDbGroupHandler({})

        self.failUnless(updater.IsMapPrimaryKey('.foo'))
        self.failIf(updater.IsMapPrimaryKey('=1000'))
        self.failIf(updater.IsMapPrimaryKey('00'))
Пример #8
0
    def testIsMapPrimaryKey(self):
        updater = nssdb.NssDbGroupHandler({})

        self.assertTrue(updater.IsMapPrimaryKey('.foo'))
        self.assertFalse(updater.IsMapPrimaryKey('=1000'))
        self.assertFalse(updater.IsMapPrimaryKey('00'))