11 from mic import plugin as pluginmgr
12 from mic import conf as configmgr
14 from mic.imager import fs
16 CWD = os.path.dirname(__file__) or '.'
17 TEST_BASEIMGR_LOC = os.path.join(CWD, 'baseimgr_fixtures')
18 KSCONF = os.path.join(CWD, 'baseimgr_fixtures', 'test.ks')
19 KSBAK = os.path.join(CWD, 'baseimgr_fixtures', 'test.ks.bak')
20 REPOURI = os.path.join(CWD, 'baseimgr_fixtures')
21 CACHEDIR = os.path.join(CWD, 'baseimgr_fixtures', 'cache')
25 return unittest.makeSuite(BaseImgrTest)
27 class BaseImgrTest(unittest.TestCase):
30 rootdir = "%s/rootdir" % os.getcwd()
31 expect_pkglist = ['A', 'ABC', 'C', 'D', 'E', 'F', 'G', 'H']
34 self.stdout = sys.stdout
35 self.stream = sys.stdout
36 msger.STREAM = StringIO.StringIO()
37 shutil.copy2(KSCONF, KSBAK)
38 with open(KSCONF, 'r') as f:
40 content = content.replace('$$$$$$', "file://" + REPOURI)
41 with open(KSCONF, 'w') as f:
43 msger.set_loglevel('quiet')
46 sys.stdout = self.stdout
47 msger.STREAM = self.stream
48 shutil.copy2(KSBAK, KSCONF)
49 shutil.rmtree (self.rootdir, ignore_errors = True)
50 shutil.rmtree (CACHEDIR, ignore_errors = True)
53 def getMountList(self, pattern):
55 dev_null = os.open("/dev/null", os.O_WRONLY)
56 p = subprocess.Popen('mount', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
58 for entry in p.communicate()[0].split('\n'):
59 if entry.find(pattern) > 0:
60 real_mount_list.append(entry.split(' ')[2])
61 real_mount_list.sort()
63 return real_mount_list
65 def getInsPkgList(self, rootdir):
67 ts = rpm.TransactionSet (rootdir)
70 installed_pkgs.append(pkg['name'])
76 def BaseImager(self, backend):
79 cfgmgr = configmgr.configmgr
80 creatoropts = cfgmgr.create
82 creatoropts["cachedir"] = CACHEDIR
83 creatoropts["outdir"] = self.rootdir
84 creatoropts["arch"] = self.arch
85 creatoropts['pkgmgr'] = backend
86 cfgmgr._ksconf = KSCONF
88 for (key, pcls) in pluginmgr.PluginMgr().get_plugins('backend').iteritems():
89 if key == creatoropts['pkgmgr']:
93 creator = fs.FsImageCreator(creatoropts, pkgmgr)
94 creator._recording_pkgs.append('name')
96 creator.check_depend_tools()
98 # Test mount interface
99 creator.mount(None, creatoropts["cachedir"])
101 os.makedirs(RPMLOCK_PATH)
103 RPMLOCK_PATH = "%s/var/lib/rpm" % creator._instroot
104 exp_mount_list = ['/sys', '/proc', '/proc/sys/fs/binfmt_misc', '/dev/pts']
105 exp_mount_list.sort()
106 exp_mount_list = [os.path.join(creator._instroot, pth.lstrip('/')) for pth in exp_mount_list]
107 real_mount_list = self.getMountList(creator._instroot)
108 self.assertEqual(real_mount_list, exp_mount_list)
110 # Test Install interface
112 installed_pkgs = self.getInsPkgList(creator._instroot)
113 self.assertEqual(installed_pkgs, self.expect_pkglist)
115 # Test umount interface
117 real_mount_list = self.getMountList(creator._instroot)
118 self.assertEqual(real_mount_list, [])
119 # Test Packaging interface
120 creator.package(creatoropts["outdir"])
121 installed_pkgs = self.getInsPkgList("%s/%s" % (self.rootdir, creator.name))
122 self.assertEqual(installed_pkgs, self.expect_pkglist)
125 # Test recore_pkgs option
126 pkglist = ['A.i586 0.1-1', 'ABC.i586 0.1-1', 'C.i686 0.2-1',
127 'D.i586 0.1-1', 'E.i586 0.1-1', 'F.noarch 0.1-1',
128 'G.i586 0.1-1', 'H.noarch 0.1-1']
129 f = open ("%s/%s.packages" % (self.rootdir, creator.name))
130 real_pkglist = f.read()
131 self.assertEqual(real_pkglist, '\n'.join(pkglist))
134 def testBaseImagerZypp(self):
135 self.BaseImager('zypp')
137 def testBaseImagerYum(self):
138 self.BaseImager('yum')
140 if __name__ == "__main__":
142 raise SystemExit("Root permission is needed")