Пример #1
0
 def test_adds_boot_resource_set_to_existing_uploaded_boot_resource(self):
     os = factory.make_name('os')
     series = factory.make_name('series')
     OperatingSystemRegistry.register_item(os, CustomOS())
     self.addCleanup(OperatingSystemRegistry.unregister_item, os)
     name = '%s/%s' % (os, series)
     architecture = make_usable_architecture(self)
     resource = factory.make_usable_boot_resource(
         rtype=BOOT_RESOURCE_TYPE.UPLOADED,
         name=name,
         architecture=architecture)
     upload_type, filetype = self.pick_filetype()
     size = random.randint(1024, 2048)
     content = factory.make_string(size).encode('utf-8')
     upload_name = factory.make_name('filename')
     uploaded_file = SimpleUploadedFile(content=content, name=upload_name)
     data = {
         'name': name,
         'architecture': architecture,
         'filetype': upload_type,
         'keep_old': True,
     }
     form = BootResourceForm(data=data, files={'content': uploaded_file})
     self.assertTrue(form.is_valid(), form._errors)
     form.save()
     resource = reload_object(resource)
     resource_set = resource.sets.order_by('id').last()
     rfile = resource_set.files.first()
     self.assertTrue(filetype, rfile.filetype)
     self.assertTrue(filetype, rfile.filename)
     self.assertTrue(size, rfile.largefile.total_size)
     with rfile.largefile.content.open('rb') as stream:
         written_content = stream.read()
     self.assertEqual(content, written_content)
     self.assertEqual(resource.rtype, BOOT_RESOURCE_TYPE.UPLOADED)
Пример #2
0
 def test_removes_old_bootresourcefiles(self):
     # Regression test for LP:1660418
     os = factory.make_name('os')
     series = factory.make_name('series')
     OperatingSystemRegistry.register_item(os, CustomOS())
     self.addCleanup(OperatingSystemRegistry.unregister_item, os)
     name = '%s/%s' % (os, series)
     architecture = make_usable_architecture(self)
     resource = factory.make_usable_boot_resource(
         rtype=BOOT_RESOURCE_TYPE.UPLOADED,
         name=name,
         architecture=architecture)
     upload_type, filetype = self.pick_filetype()
     size = random.randint(1024, 2048)
     content = factory.make_string(size).encode('utf-8')
     upload_name = factory.make_name('filename')
     uploaded_file = SimpleUploadedFile(content=content, name=upload_name)
     data = {
         'name': name,
         'architecture': architecture,
         'filetype': upload_type,
     }
     form = BootResourceForm(data=data, files={'content': uploaded_file})
     self.assertTrue(form.is_valid(), form._errors)
     form.save()
     self.assertEqual(
         1,
         BootResourceFile.objects.filter(
             resource_set__resource=resource).count())
Пример #3
0
def make_osystem_with_releases(testcase, osystem_name=None, releases=None):
    """Generate an arbitrary operating system.

    :param osystem_name: The operating system name. Useful in cases where
        we need to test that not supplying an os works correctly.
    :param releases: The list of releases name. Useful in cases where
        we need to test that not supplying a release works correctly.
    """
    if osystem_name is None:
        osystem_name = factory.make_name('os')
    if releases is None:
        releases = [factory.make_name('release') for _ in range(3)]
    rpc_releases = [make_rpc_release(release) for release in releases]
    if osystem_name not in OperatingSystemRegistry:
        OperatingSystemRegistry.register_item(osystem_name, CustomOS())
        testcase.addCleanup(OperatingSystemRegistry.unregister_item,
                            osystem_name)
    # Make sure the commissioning Ubuntu release and all created releases
    # are available to all architectures.
    architectures = [
        node.architecture for node in Node.objects.distinct('architecture')
    ]
    if len(architectures) == 0:
        architectures.append('%s/generic' % factory.make_name('arch'))
    for arch in architectures:
        factory.make_default_ubuntu_release_bootable(arch.split('/')[0])
        for release in releases:
            factory.make_BootResource(rtype=BOOT_RESOURCE_TYPE.UPLOADED,
                                      name=('%s/%s' % (osystem_name, release)),
                                      architecture=arch)
    return make_rpc_osystem(osystem_name, releases=rpc_releases)
Пример #4
0
 def test_creates_boot_resoures_with_uploaded_rtype(self):
     os = factory.make_name("os")
     series = factory.make_name("series")
     OperatingSystemRegistry.register_item(os, CustomOS())
     self.addCleanup(OperatingSystemRegistry.unregister_item, os)
     name = "%s/%s" % (os, series)
     architecture = make_usable_architecture(self)
     upload_type, filetype = self.pick_filetype()
     size = random.randint(1024, 2048)
     content = factory.make_string(size).encode("utf-8")
     upload_name = factory.make_name("filename")
     uploaded_file = SimpleUploadedFile(content=content, name=upload_name)
     data = {
         "name": name,
         "architecture": architecture,
         "filetype": upload_type,
     }
     form = BootResourceForm(data=data, files={"content": uploaded_file})
     self.assertTrue(form.is_valid(), form._errors)
     form.save()
     resource = BootResource.objects.get(
         rtype=BOOT_RESOURCE_TYPE.UPLOADED,
         name=name,
         architecture=architecture,
     )
     resource_set = resource.sets.first()
     rfile = resource_set.files.first()
     self.assertTrue(filetype, rfile.filetype)
     self.assertTrue(filetype, rfile.filename)
     self.assertTrue(size, rfile.largefile.total_size)
     with rfile.largefile.content.open("rb") as stream:
         written_content = stream.read()
     self.assertEqual(content, written_content)
Пример #5
0
 def make_os_with_license_key(self,
                              osystem=None,
                              osystem_title=None,
                              release=None):
     """Makes a fake operating system that has a release that requires a
     license key."""
     if osystem is None:
         osystem = factory.make_name("osystem")
     if osystem_title is None:
         osystem_title = osystem + "_title"
     if release is None:
         release = random.choice(REQUIRE_LICENSE_KEY)
     distro_series = "%s/%s" % (osystem, release)
     drv = WindowsOS()
     drv.title = osystem_title
     OperatingSystemRegistry.register_item(osystem, drv)
     factory.make_BootResource(
         name=distro_series,
         rtype=BOOT_RESOURCE_TYPE.UPLOADED,
         extra={"title": drv.get_release_title(release)},
     )
     self.addCleanup(OperatingSystemRegistry.unregister_item, osystem)
     return (
         {
             "name": osystem,
             "title": osystem_title
         },
         {
             "name": release,
             "title": drv.get_release_title(release)
         },
     )
Пример #6
0
def make_osystem_requiring_license_key(testcase, osystem=None, release=None):
    if osystem is None:
        osystem = factory.make_name("osystem")
    if release is None:
        release = random.choice(REQUIRE_LICENSE_KEY)
    distro_series = "%s/%s" % (osystem, release)
    drv = WindowsOS()
    drv.title = osystem
    OperatingSystemRegistry.register_item(osystem, drv)
    factory.make_BootResource(
        name=distro_series,
        rtype=BOOT_RESOURCE_TYPE.UPLOADED,
        extra={"title": drv.get_release_title(release)},
    )
    testcase.addCleanup(OperatingSystemRegistry.unregister_item, osystem)
    return {
        "name":
        osystem,
        "title":
        osystem,
        "default_release":
        release,
        "default_commissioning_release":
        None,
        "releases": [{
            "name": distro_series,
            "title": drv.get_release_title(release),
            "requires_license_key": True,
            "can_commission": False,
        }],
    }
Пример #7
0
def make_osystem_requiring_license_key(testcase, osystem=None, release=None):
    if osystem is None:
        osystem = factory.make_name('osystem')
    if release is None:
        release = random.choice(REQUIRE_LICENSE_KEY)
    distro_series = '%s/%s' % (osystem, release)
    drv = WindowsOS()
    drv.title = osystem
    OperatingSystemRegistry.register_item(osystem, drv)
    factory.make_BootResource(
        name=distro_series, rtype=BOOT_RESOURCE_TYPE.UPLOADED,
        extra={'title': drv.get_release_title(release)})
    testcase.addCleanup(
        OperatingSystemRegistry.unregister_item, osystem)
    return {
        'name': osystem,
        'title': osystem,
        'default_release': release,
        'default_commissioning_release': None,
        'releases': [{
            'name': distro_series,
            'title': drv.get_release_title(release),
            'requires_license_key': True,
            'can_commission': False,
            }]
        }
Пример #8
0
def make_os(testcase):
    osystem = factory.make_name('osystem')
    release = random.choice(REQUIRE_LICENSE_KEY)
    distro_series = '%s/%s' % (osystem, release)
    drv = WindowsOS()
    drv.title = osystem
    OperatingSystemRegistry.register_item(osystem, drv)
    factory.make_BootResource(
        name=distro_series, rtype=BOOT_RESOURCE_TYPE.UPLOADED,
        extra={'title': drv.get_release_title(release)})
    testcase.addCleanup(
        OperatingSystemRegistry.unregister_item, osystem)
    return osystem, release
Пример #9
0
 def test_prevents_reversed_osystem_from_driver(self):
     reserved_name = factory.make_name('name')
     OperatingSystemRegistry.register_item(reserved_name, CustomOS())
     upload_type, filetype = self.pick_filetype()
     size = random.randint(1024, 2048)
     content = factory.make_string(size).encode('utf-8')
     upload_name = factory.make_name('filename')
     uploaded_file = SimpleUploadedFile(content=content, name=upload_name)
     data = {
         'name': reserved_name,
         'title': factory.make_name('title'),
         'architecture': make_usable_architecture(self),
         'filetype': upload_type,
     }
     form = BootResourceForm(data=data, files={'content': uploaded_file})
     self.assertFalse(form.is_valid())
Пример #10
0
 def test_settings_shows_license_keys_if_OS_supporting_keys(self):
     self.client.login(user=factory.make_admin())
     osystem = factory.make_name('osystem')
     release = random.choice(REQUIRE_LICENSE_KEY)
     distro_series = '%s/%s' % (osystem, release)
     drv = WindowsOS()
     drv.title = osystem
     OperatingSystemRegistry.register_item(osystem, drv)
     factory.make_BootResource(
         name=distro_series,
         rtype=BOOT_RESOURCE_TYPE.UPLOADED,
         extra={'title': drv.get_release_title(release)})
     self.addCleanup(OperatingSystemRegistry.unregister_item, osystem)
     response = self.client.get(reverse('settings_general'))
     doc = fromstring(response.content)
     license_keys = doc.cssselect('a[href="/MAAS/settings/license-keys/"]')
     self.assertEqual(1, len(license_keys),
                      "Didn't show the license key section.")
Пример #11
0
def make_osystem(testcase, osystem, purpose=None, releases=None):
    """Makes the operating system class and registers it."""
    if osystem not in OperatingSystemRegistry:
        fake = FakeOS(osystem, purpose, releases)
        OperatingSystemRegistry.register_item(fake.name, fake)
        testcase.addCleanup(OperatingSystemRegistry.unregister_item, osystem)
        return fake

    else:

        obj = OperatingSystemRegistry[osystem]
        old_func = obj.get_boot_image_purposes
        testcase.patch(obj, "get_boot_image_purposes").return_value = purpose

        def reset_func(obj, old_func):
            obj.get_boot_image_purposes = old_func

        testcase.addCleanup(reset_func, obj, old_func)

        return obj
Пример #12
0
 def test_operating_system_registry(self):
     self.assertItemsEqual([], OperatingSystemRegistry)
     OperatingSystemRegistry.register_item("resource", sentinel.resource)
     self.assertIn(sentinel.resource,
                   (item for name, item in OperatingSystemRegistry))