Skip to content
This repository has been archived by the owner on Aug 23, 2019. It is now read-only.

Commit

Permalink
Refactor towards running provisioner tests against vms
Browse files Browse the repository at this point in the history
  • Loading branch information
Jc2k committed Apr 5, 2014
1 parent f39133e commit 8506689
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 74 deletions.
13 changes: 11 additions & 2 deletions yaybu/provisioner/part.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import os
import logging
import getpass
import urlparse

import yay
from yay.errors import NotFound, NotModified
Expand Down Expand Up @@ -43,7 +44,9 @@ class Provision(base.GraphExternalAction):
resources: {{ resources }}
"""

Transport = transports.SSHTransport
transports = {
"ssh": transports.SSHTransport,
}

def apply(self):
if self.root.readonly:
Expand Down Expand Up @@ -71,7 +74,13 @@ def apply(self):
if os.path.exists("/etc/yaybu"):
self.options = yay.load_uri("/etc/yaybu")

self.transport = self.Transport(
if "://" in hostname:
parsed = urlparse.urlparse(hostname)
Transport = self.transports[parsed.scheme]
else:
Transport = self.transports["ssh"]

self.transport = Transport(
context=self,
verbose=root.verbose,
simulate=root.simulate,
Expand Down
16 changes: 15 additions & 1 deletion yaybu/provisioner/transports/fakechroot.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,14 @@
# See the License for the specific language governing permissions and
# limitations under the License.

from . import local, remote, base
from __future__ import absolute_import

import os
import urlparse

from fakechroot import FakeChroot

from . import local, remote, base


class FakechrootTransport(base.Transport, remote.RemoteTransport, local.LocalExecute):
Expand All @@ -29,6 +35,14 @@ class FakechrootTransport(base.Transport, remote.RemoteTransport, local.LocalExe
"LD_LIBRARY_PATH",
]

def __init__(self, context, *args, **kwargs):
super(FakechrootTransport, self).__init__(context, *args, **kwargs)

chroot = FakeChroot(urlparse.urlparse(context.hostname).path)
self.env = chroot.get_env()
self.chroot_path = chroot.chroot_path
self.overlay_dir = chroot.overlay_dir

def whoami(self):
return "root"

Expand Down
1 change: 0 additions & 1 deletion yaybu/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@
test_provisioner_providers_user,
test_provisioner_resource,
test_provisioner_transports_base,
test_provisioner_transports_fakechroot,
test_provisioner_transports_local,
test_provisioner_transports_remote,
test_static,
Expand Down
54 changes: 28 additions & 26 deletions yaybu/tests/provisioner_fixture.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ class SkipTest(Exception):
from yaybu.tests.base import TestCase as BaseTestCase
from yaybu.provisioner.transports.remote import stat_result, \
struct_group, struct_passwd, struct_spwd
from yaybu.provisioner.transports.fakechroot import FakechrootTransport


class TransportRecorder(object):
Expand All @@ -39,6 +40,8 @@ class TransportRecorder(object):
# id = ...
# Transport = ...

Transport = FakechrootTransport

def __init__(self, *args, **kwargs):
self.inner = self.Transport(*args, **kwargs)

Expand Down Expand Up @@ -98,49 +101,39 @@ def _(*args, **kwargs):
return _


class YaybuFakeChroot(FakeChroot):

"""
I provide a very simple COW userspace environment in which to test configuration
I am used for some of Yaybu's internal tests.
"""

Exception = SkipTest


class TestCase(BaseTestCase):

FakeChroot = YaybuFakeChroot
FakeChroot = FakeChroot
location = os.path.join(os.path.dirname(__file__), "..", "..", "..")
Transport = None

def setUp(self):
self.path = inspect.getfile(self.__class__).rsplit(".", 1)[0] + ".json"

if os.environ.get("YAYBU_RECORD_FIXTURES", "") == "YES":
self._setUp_for_recording()
context = self._setUp_for_recording()
else:
self._setUp_for_playback()

self.transport = self.Transport(None, 5, False)
context = self._setUp_for_playback()

self.Transport.path = self.path
self.Transport.id = self.id()

# Get a transport to inspect the changes Yaybu makes to a fakechroot
self.transport = self.Transport(context, 5, False)

# Let yaybu use this fakechroot
from yaybu.provisioner import Provision
Provision.Transport = self.Transport
Provision.transports["fakechroot"] = self.Transport
#self.addCleanup(operator.del, Provision.transports, "fakechroot")

def _setUp_for_recording(self):
self.chroot = self.FakeChroot.create_in_tempdir(self.location)
self.addCleanup(self.chroot.destroy)
self.chroot.build()
chroot = self.FakeChroot.create_in_tempdir(self.location)
self.addCleanup(chroot.destroy)
chroot.build()

from yaybu.provisioner.transports import FakechrootTransport
FakechrootTransport.env = self.chroot.get_env()
FakechrootTransport.chroot_path = self.chroot.chroot_path
FakechrootTransport.overlay_dir = self.chroot.overlay_dir
self.chroot_path = chroot.chroot_path

from yaybu.provisioner.transports import FakechrootTransport
TransportRecorder.results = self.results = []
TransportRecorder.Transport = FakechrootTransport

Expand All @@ -155,6 +148,11 @@ def cleanup():
self.addCleanup(cleanup)
self.Transport = TransportRecorder

class FakeContext:
hostname = "fakechroot:///" + self.location

return FakeContext()

def _setUp_for_playback(self):
t = self.Transport = TransportPlayback
payload = pkgutil.get_data("yaybu.tests", os.path.basename(self.path))
Expand All @@ -164,6 +162,10 @@ def _setUp_for_playback(self):
all_results = {}
t.results = all_results.get(self.id(), [])

self.chroot_path = "/tmp-playback-XOXOXO"

return None

def failUnlessExists(self, path):
assert self.transport.exists(path), "%s doesnt exist" % path

Expand All @@ -178,9 +180,9 @@ def _config(self, contents):
main:
new Provisioner:
server:
fqdn: fakechroot:///
fqdn: fakechroot:///%s
resources: {{ resources }}
""" % path)
""" % (path, self.chroot_path))
return path2

# FIXME: Methods beyond this point are deprecated
Expand Down
44 changes: 0 additions & 44 deletions yaybu/tests/test_provisioner_transports_fakechroot.py

This file was deleted.

0 comments on commit 8506689

Please sign in to comment.