コード例 #1
0
 def test_close_on_error(self):
     vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
     vfs.setup()
     self.assertFalse(vfs.handle.kwargs['close_on_exit'])
     vfs.teardown()
     self.stubs.Set(fakeguestfs.GuestFS, 'SUPPORT_CLOSE_ON_EXIT', False)
     vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
     vfs.setup()
     self.assertNotIn('close_on_exit', vfs.handle.kwargs)
     vfs.teardown()
コード例 #2
0
 def test_python_return_dict(self):
     vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
     vfs.setup()
     self.assertFalse(vfs.handle.kwargs['python_return_dict'])
     vfs.teardown()
     self.stubs.Set(fakeguestfs.GuestFS, 'SUPPORT_RETURN_DICT', False)
     vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
     vfs.setup()
     self.assertNotIn('python_return_dict', vfs.handle.kwargs)
     vfs.teardown()
コード例 #3
0
ファイル: test_inject.py プロジェクト: 2Exception/patron
    def test_inject_data_key_with_selinux_append_with_newline(self):

        vfs = vfsguestfs.VFSGuestFS("/some/file", "qcow2")
        vfs.setup()

        vfs.replace_file("/etc/rc.d/rc.local", "#!/bin/sh\necho done")
        vfs.make_path("etc/selinux")
        vfs.make_path("etc/rc.d")
        diskapi._inject_key_into_fs("mysshkey", vfs)

        self.assertIn("/etc/rc.d/rc.local", vfs.handle.files)
        self.assertEqual(
            vfs.handle.files["/etc/rc.d/rc.local"], {
                'isdir':
                False,
                'content':
                "#!/bin/sh\necho done\n# Added "
                "by Nova to ensure injected ssh keys have "
                "the right context\nrestorecon -RF "
                "root/.ssh 2>/dev/null || :\n",
                'gid':
                100,
                'uid':
                100,
                'mode':
                0o700
            })
        vfs.teardown()
コード例 #4
0
 def test_setup_debug_enabled(self):
     self.flags(debug=True, group='guestfs')
     vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
     vfs.setup()
     self.assertTrue(vfs.handle.trace_enabled)
     self.assertTrue(vfs.handle.verbose_enabled)
     self.assertIsNotNone(vfs.handle.event_callback)
コード例 #5
0
ファイル: test_inject.py プロジェクト: 2Exception/patron
    def test_inject_data_key(self):

        vfs = vfsguestfs.VFSGuestFS("/some/file", "qcow2")
        vfs.setup()

        diskapi._inject_key_into_fs("mysshkey", vfs)

        self.assertIn("/root/.ssh", vfs.handle.files)
        self.assertEqual(vfs.handle.files["/root/.ssh"], {
            'isdir': True,
            'gid': 0,
            'uid': 0,
            'mode': 0o700
        })
        self.assertIn("/root/.ssh/authorized_keys", vfs.handle.files)
        self.assertEqual(
            vfs.handle.files["/root/.ssh/authorized_keys"], {
                'isdir': False,
                'content': "Hello World\n# The following ssh " +
                "key was injected by Nova\nmysshkey\n",
                'gid': 100,
                'uid': 100,
                'mode': 0o600
            })

        vfs.teardown()
コード例 #6
0
ファイル: test_inject.py プロジェクト: 2Exception/patron
    def test_inject_files_into_fs(self):
        vfs = vfsguestfs.VFSGuestFS("/some/file", "qcow2")
        vfs.setup()

        diskapi._inject_files_into_fs(
            [("/path/to/not/exists/file", "inject-file-contents")], vfs)

        self.assertIn("/path/to/not/exists", vfs.handle.files)
        shadow_dir = vfs.handle.files["/path/to/not/exists"]
        self.assertEqual(shadow_dir, {
            "isdir": True,
            "gid": 0,
            "uid": 0,
            "mode": 0o744
        })

        shadow_file = vfs.handle.files["/path/to/not/exists/file"]
        self.assertEqual(
            shadow_file, {
                "isdir": False,
                "content": "inject-file-contents",
                "gid": 100,
                "uid": 100,
                "mode": 0o700
            })
        vfs.teardown()
コード例 #7
0
    def test_has_file(self):
        vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
        vfs.setup()
        vfs.read_file("/some/file")

        self.assertTrue(vfs.has_file("/some/file"))
        self.assertFalse(vfs.has_file("/other/file"))

        vfs.teardown()
コード例 #8
0
    def test_replace_file(self):
        vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
        vfs.setup()
        vfs.replace_file("/some/file", "Goodbye")

        self.assertIn("/some/file", vfs.handle.files)
        self.assertEqual("Goodbye",
                         vfs.handle.files["/some/file"]["content"])

        vfs.teardown()
コード例 #9
0
    def test_set_permissions(self):
        vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
        vfs.setup()
        vfs.read_file("/some/file")

        self.assertEqual(0o700, vfs.handle.files["/some/file"]["mode"])

        vfs.set_permissions("/some/file", 0o7777)
        self.assertEqual(0o7777, vfs.handle.files["/some/file"]["mode"])

        vfs.teardown()
コード例 #10
0
    def test_makepath(self):
        vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
        vfs.setup()
        vfs.make_path("/some/dir")
        vfs.make_path("/other/dir")

        self.assertIn("/some/dir", vfs.handle.files)
        self.assertIn("/other/dir", vfs.handle.files)
        self.assertTrue(vfs.handle.files["/some/dir"]["isdir"])
        self.assertTrue(vfs.handle.files["/other/dir"]["isdir"])

        vfs.teardown()
コード例 #11
0
    def test_appliance_setup_inspect_multi_boots_raises(self):
        vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2",
                                 imgfmt="qcow2",
                                 partition=-1)
        # call setup to init the handle so we can stub it
        vfs.setup()

        self.assertIsNone(vfs.handle.backend_settings)

        def fake_inspect_os():
            return ['fake1', 'fake2']

        self.stubs.Set(vfs.handle, 'inspect_os', fake_inspect_os)
        self.assertRaises(exception.PatronException, vfs.setup_os_inspect)
コード例 #12
0
ファイル: test_inject.py プロジェクト: 2Exception/patron
    def test_inject_metadata(self):
        vfs = vfsguestfs.VFSGuestFS("/some/file", "qcow2")
        vfs.setup()

        diskapi._inject_metadata_into_fs({"foo": "bar", "eek": "wizz"}, vfs)

        self.assertIn("/meta.js", vfs.handle.files)
        self.assertEqual(
            {
                'content': '{"foo": "bar", ' + '"eek": "wizz"}',
                'gid': 100,
                'isdir': False,
                'mode': 0o700,
                'uid': 100
            }, vfs.handle.files["/meta.js"])
        vfs.teardown()
コード例 #13
0
ファイル: test_inject.py プロジェクト: 2Exception/patron
    def test_inject_net(self):

        vfs = vfsguestfs.VFSGuestFS("/some/file", "qcow2")
        vfs.setup()

        diskapi._inject_net_into_fs("mynetconfig", vfs)

        self.assertIn("/etc/network/interfaces", vfs.handle.files)
        self.assertEqual(
            vfs.handle.files["/etc/network/interfaces"], {
                'content': 'mynetconfig',
                'gid': 100,
                'isdir': False,
                'mode': 0o700,
                'uid': 100
            })
        vfs.teardown()
コード例 #14
0
ファイル: test_inject.py プロジェクト: 2Exception/patron
    def test_inject_data_key_with_selinux(self):

        vfs = vfsguestfs.VFSGuestFS("/some/file", "qcow2")
        vfs.setup()

        vfs.make_path("etc/selinux")
        vfs.make_path("etc/rc.d")
        diskapi._inject_key_into_fs("mysshkey", vfs)

        self.assertIn("/etc/rc.d/rc.local", vfs.handle.files)
        self.assertEqual(
            vfs.handle.files["/etc/rc.d/rc.local"], {
                'isdir':
                False,
                'content':
                "Hello World#!/bin/sh\n# Added by " +
                "Nova to ensure injected ssh keys " +
                "have the right context\nrestorecon " +
                "-RF root/.ssh 2>/dev/null || :\n",
                'gid':
                100,
                'uid':
                100,
                'mode':
                0o700
            })

        self.assertIn("/root/.ssh", vfs.handle.files)
        self.assertEqual(vfs.handle.files["/root/.ssh"], {
            'isdir': True,
            'gid': 0,
            'uid': 0,
            'mode': 0o700
        })
        self.assertIn("/root/.ssh/authorized_keys", vfs.handle.files)
        self.assertEqual(
            vfs.handle.files["/root/.ssh/authorized_keys"], {
                'isdir': False,
                'content': "Hello World\n# The following ssh " +
                "key was injected by Nova\nmysshkey\n",
                'gid': 100,
                'uid': 100,
                'mode': 0o600
            })

        vfs.teardown()
コード例 #15
0
    def test_appliance_setup_static_part(self):
        vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2",
                                 imgfmt="qcow2",
                                 partition=2)
        vfs.setup()

        self.assertIsNone(vfs.handle.backend_settings)
        self.assertTrue(vfs.handle.running)
        self.assertEqual(1, len(vfs.handle.mounts))
        self.assertEqual("/dev/sda2", vfs.handle.mounts[0][1])
        self.assertEqual("/", vfs.handle.mounts[0][2])

        handle = vfs.handle
        vfs.teardown()

        self.assertIsNone(vfs.handle)
        self.assertFalse(handle.running)
        self.assertTrue(handle.closed)
        self.assertEqual(0, len(handle.mounts))
コード例 #16
0
    def test_set_ownership(self):
        vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
        vfs.setup()
        vfs.read_file("/some/file")

        self.assertEqual(100, vfs.handle.files["/some/file"]["uid"])
        self.assertEqual(100, vfs.handle.files["/some/file"]["gid"])

        vfs.set_ownership("/some/file", "fred", None)
        self.assertEqual(105, vfs.handle.files["/some/file"]["uid"])
        self.assertEqual(100, vfs.handle.files["/some/file"]["gid"])

        vfs.set_ownership("/some/file", None, "users")
        self.assertEqual(105, vfs.handle.files["/some/file"]["uid"])
        self.assertEqual(500, vfs.handle.files["/some/file"]["gid"])

        vfs.set_ownership("/some/file", "joe", "admins")
        self.assertEqual(110, vfs.handle.files["/some/file"]["uid"])
        self.assertEqual(600, vfs.handle.files["/some/file"]["gid"])

        vfs.teardown()
コード例 #17
0
ファイル: test_inject.py プロジェクト: 2Exception/patron
    def test_inject_files_into_fs_dir_exists(self):
        vfs = vfsguestfs.VFSGuestFS("/some/file", "qcow2")
        vfs.setup()

        called = {'make_path': False}

        def fake_has_file(*args, **kwargs):
            return True

        def fake_make_path(*args, **kwargs):
            called['make_path'] = True

        self.stubs.Set(vfs, 'has_file', fake_has_file)
        self.stubs.Set(vfs, 'make_path', fake_make_path)

        # test for already exists dir
        diskapi._inject_files_into_fs(
            [("/path/to/exists/file", "inject-file-contents")], vfs)

        self.assertIn("/path/to/exists/file", vfs.handle.files)
        self.assertFalse(called['make_path'])

        # test for root dir
        diskapi._inject_files_into_fs(
            [("/inject-file", "inject-file-contents")], vfs)

        self.assertIn("/inject-file", vfs.handle.files)
        self.assertFalse(called['make_path'])

        # test for null dir
        vfs.handle.files.pop("/inject-file")
        diskapi._inject_files_into_fs(
            [("inject-file", "inject-file-contents")], vfs)

        self.assertIn("/inject-file", vfs.handle.files)
        self.assertFalse(called['make_path'])

        vfs.teardown()
コード例 #18
0
    def _do_test_appliance_setup_inspect(self, forcetcg):
        if forcetcg:
            vfsimpl.force_tcg()
        else:
            vfsimpl.force_tcg(False)

        vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2",
                                 imgfmt="qcow2",
                                 partition=-1)
        vfs.setup()

        if forcetcg:
            self.assertEqual("force_tcg", vfs.handle.backend_settings)
            vfsimpl.force_tcg(False)
        else:
            self.assertIsNone(vfs.handle.backend_settings)

        self.assertTrue(vfs.handle.running)
        self.assertEqual(3, len(vfs.handle.mounts))
        self.assertEqual("/dev/mapper/guestvgf-lv_root",
                         vfs.handle.mounts[0][1])
        self.assertEqual("/dev/vda1",
                         vfs.handle.mounts[1][1])
        self.assertEqual("/dev/mapper/guestvgf-lv_home",
                         vfs.handle.mounts[2][1])
        self.assertEqual("/", vfs.handle.mounts[0][2])
        self.assertEqual("/boot", vfs.handle.mounts[1][2])
        self.assertEqual("/home", vfs.handle.mounts[2][2])

        handle = vfs.handle
        vfs.teardown()

        self.assertIsNone(vfs.handle)
        self.assertFalse(handle.running)
        self.assertTrue(handle.closed)
        self.assertEqual(0, len(handle.mounts))
コード例 #19
0
 def test_setup_mount(self, setup_os):
     vfs = vfsimpl.VFSGuestFS("img.qcow2", imgfmt='qcow2')
     vfs.setup()
     self.assertTrue(setup_os.called)
コード例 #20
0
    def test_read_file(self):
        vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
        vfs.setup()
        self.assertEqual("Hello World", vfs.read_file("/some/file"))

        vfs.teardown()
コード例 #21
0
ファイル: test_inject.py プロジェクト: 2Exception/patron
    def test_inject_admin_password(self):
        vfs = vfsguestfs.VFSGuestFS("/some/file", "qcow2")
        vfs.setup()

        def fake_salt():
            return "1234567890abcdef"

        self.stubs.Set(diskapi, '_generate_salt', fake_salt)

        vfs.handle.write(
            "/etc/shadow", "root:$1$12345678$xxxxx:14917:0:99999:7:::\n" +
            "bin:*:14495:0:99999:7:::\n" + "daemon:*:14495:0:99999:7:::\n")

        vfs.handle.write(
            "/etc/passwd", "root:x:0:0:root:/root:/bin/bash\n" +
            "bin:x:1:1:bin:/bin:/sbin/nologin\n" +
            "daemon:x:2:2:daemon:/sbin:/sbin/nologin\n")

        diskapi._inject_admin_password_into_fs("123456", vfs)

        self.assertEqual(
            vfs.handle.files["/etc/passwd"], {
                'content':
                "root:x:0:0:root:/root:/bin/bash\n" +
                "bin:x:1:1:bin:/bin:/sbin/nologin\n" +
                "daemon:x:2:2:daemon:/sbin:" + "/sbin/nologin\n",
                'gid':
                100,
                'isdir':
                False,
                'mode':
                0o700,
                'uid':
                100
            })
        shadow = vfs.handle.files["/etc/shadow"]

        # if the encrypted password is only 13 characters long, then
        # patron.virt.disk.api:_set_password fell back to DES.
        if len(shadow['content']) == 91:
            self.assertEqual(
                shadow, {
                    'content':
                    "root:12tir.zIbWQ3c" + ":14917:0:99999:7:::\n" +
                    "bin:*:14495:0:99999:7:::\n" +
                    "daemon:*:14495:0:99999:7:::\n",
                    'gid':
                    100,
                    'isdir':
                    False,
                    'mode':
                    0o700,
                    'uid':
                    100
                })
        else:
            self.assertEqual(
                shadow, {
                    'content':
                    "root:$1$12345678$a4ge4d5iJ5vw" +
                    "vbFS88TEN0:14917:0:99999:7:::\n" +
                    "bin:*:14495:0:99999:7:::\n" +
                    "daemon:*:14495:0:99999:7:::\n",
                    'gid':
                    100,
                    'isdir':
                    False,
                    'mode':
                    0o700,
                    'uid':
                    100
                })
        vfs.teardown()
コード例 #22
0
 def test_setup_debug_disable(self):
     vfs = vfsimpl.VFSGuestFS(imgfile="/dummy.qcow2", imgfmt="qcow2")
     vfs.setup()
     self.assertFalse(vfs.handle.trace_enabled)
     self.assertFalse(vfs.handle.verbose_enabled)
     self.assertIsNone(vfs.handle.event_callback)
コード例 #23
0
 def test_get_format_fs(self):
     vfs = vfsimpl.VFSGuestFS("dummy.img")
     vfs.setup()
     self.assertIsNotNone(vfs.handle)
     self.assertTrue('ext3', vfs.get_image_fs())
     vfs.teardown()
コード例 #24
0
 def test_setup_mount_false(self, setup_os):
     vfs = vfsimpl.VFSGuestFS("img.qcow2", imgfmt='qcow2')
     vfs.setup(mount=False)
     self.assertFalse(setup_os.called)