示例#1
0
 def test_starts_with_default_distro_series(self):
     self.client_log_in()
     node = factory.make_Node(owner=self.logged_in_user)
     osystems = [make_osystem_with_releases(self) for _ in range(5)]
     patch_usable_osystems(self, osystems)
     form = MachineForm(instance=node)
     self.assertEqual('', form.fields['distro_series'].initial)
示例#2
0
 def test_rejects_when_validate_license_key_returns_False(self):
     user = factory.make_User()
     self.client.login(user=user)
     node = factory.make_Node(owner=user)
     release = make_rpc_release(requires_license_key=True)
     osystem = make_rpc_osystem(releases=[release])
     patch_usable_osystems(self, osystems=[osystem])
     license_key = factory.make_name('key')
     mock_validate = self.patch(forms, 'validate_license_key')
     mock_validate.return_value = False
     form = MachineForm(data={
         'hostname':
         factory.make_name('host'),
         'architecture':
         make_usable_architecture(self),
         'osystem':
         osystem['name'],
         'distro_series':
         '%s/%s*' % (osystem['name'], release['name']),
         'license_key':
         license_key,
     },
                        instance=node)
     self.assertFalse(form.is_valid())
     self.assertItemsEqual(['license_key'], form._errors.keys())
示例#3
0
 def make_os_with_license_key(self):
     """Makes a fake operating system that has a release that requires a
     license key."""
     release = make_rpc_release(requires_license_key=True)
     osystem = make_rpc_osystem(releases=[release])
     patch_usable_osystems(self, osystems=[osystem])
     return osystem, release
示例#4
0
 def test_starts_with_default_osystem(self):
     user = factory.make_User()
     self.client.login(user=user)
     node = factory.make_Node(owner=user)
     osystems = [make_osystem_with_releases(self) for _ in range(5)]
     patch_usable_osystems(self, osystems)
     form = MachineForm(instance=node)
     self.assertEqual('', form.fields['osystem'].initial)
示例#5
0
 def make_license_key_with_os(self, license_key=None):
     release = make_rpc_release(requires_license_key=True)
     osystem = make_rpc_osystem(releases=[release])
     patch_usable_osystems(self, osystems=[osystem])
     license_key = factory.make_LicenseKey(osystem=osystem['name'],
                                           distro_series=release['name'],
                                           license_key=license_key)
     return license_key
示例#6
0
 def test_includes_osystem_in_choices(self):
     osystems = []
     for _ in range(3):
         release = make_rpc_release(requires_license_key=True)
         osystems.append(make_rpc_osystem(releases=[release]))
     patch_usable_osystems(self, osystems=osystems)
     choices = [(osystem['name'], osystem['title']) for osystem in osystems]
     form = LicenseKeyForm()
     self.assertItemsEqual(choices, form.fields['osystem'].choices)
示例#7
0
 def test_includes_only_osystems_that_require_license_keys(self):
     osystems = []
     for _ in range(2):
         release = make_rpc_release(requires_license_key=True)
         osystems.append(make_rpc_osystem(releases=[release]))
     patch_usable_osystems(self, osystems=osystems + [make_rpc_osystem()])
     choices = [(osystem['name'], osystem['title'])
                for osystem in sorted(osystems, key=itemgetter('title'))]
     form = LicenseKeyForm()
     self.assertEqual(choices, form.fields['osystem'].choices)
示例#8
0
 def test_includes_all_distro_series(self):
     releases = [
         make_rpc_release(requires_license_key=True) for _ in range(3)
     ]
     osystem = make_rpc_osystem(releases=releases)
     patch_usable_osystems(self, osystems=[osystem])
     choices = [('%s/%s' % (osystem['name'], release['name']),
                 release['title']) for release in releases]
     form = LicenseKeyForm()
     self.assertItemsEqual(choices, form.fields['distro_series'].choices)
 def make_license_keys(self, count):
     keys = []
     osystems = []
     for _ in range(count):
         key, osystem = self.make_license_key_with_os()
         keys.append(key)
         osystems.append(osystem)
     patch_usable_osystems(self, osystems=osystems)
     self.patch(settings_view,
                'gen_all_known_operating_systems').return_value = osystems
     return keys, osystems
示例#10
0
 def test_rejects_invalid_osystem(self):
     self.client_log_in()
     node = factory.make_Node(owner=self.logged_in_user)
     patch_usable_osystems(self)
     form = MachineForm(data={
         'hostname': factory.make_name('host'),
         'architecture': make_usable_architecture(self),
         'osystem': factory.make_name('os'),
     },
                        instance=node)
     self.assertFalse(form.is_valid())
     self.assertItemsEqual(['osystem'], form._errors.keys())
示例#11
0
 def test_POST_requires_osystem(self):
     # If osystem is not specified and distro_series is not in the
     # osystem/release form, API call fails.
     self.become_admin()
     release = make_rpc_release(requires_license_key=True)
     osystem = make_rpc_osystem(releases=[release])
     patch_usable_osystems(self, osystems=[osystem])
     self.patch_autospec(forms, 'validate_license_key').return_value = True
     params = {
         'distro_series': release['name'],
         'license_key': factory.make_name('key'),
     }
     response = self.client.post(reverse('license_keys_handler'), params)
     self.assertEqual(http.client.BAD_REQUEST, response.status_code)
示例#12
0
 def test_set_config_only_default_osystem_are_valid_for_distro_series(self):
     self.become_admin()
     default_osystem = make_osystem_with_releases(self)
     other_osystem = make_osystem_with_releases(self)
     patch_usable_osystems(self, [default_osystem, other_osystem])
     Config.objects.set_config("default_osystem", default_osystem['name'])
     invalid_release = other_osystem['releases'][0]['name']
     response = self.client.post(
         reverse('maas_handler'), {
             "op": "set_config",
             "name": "default_distro_series",
             "value": invalid_release,
         })
     self.assertEqual(http.client.BAD_REQUEST, response.status_code,
                      response.content)
示例#13
0
 def test_rejects_invalid_osystem(self):
     user = factory.make_User()
     self.client.login(user=user)
     node = factory.make_Node(owner=user)
     patch_usable_osystems(self)
     form = MachineForm(
         data={
             "hostname": factory.make_name("host"),
             "architecture": make_usable_architecture(self),
             "osystem": factory.make_name("os"),
         },
         instance=node,
     )
     self.assertFalse(form.is_valid())
     self.assertItemsEqual(["osystem"], form._errors.keys())
示例#14
0
 def test_POST_creates_license_key(self):
     self.become_admin()
     release = make_rpc_release(requires_license_key=True)
     osystem = make_rpc_osystem(releases=[release])
     patch_usable_osystems(self, osystems=[osystem])
     self.patch_autospec(forms, 'validate_license_key').return_value = True
     params = {
         'osystem': osystem['name'],
         'distro_series': release['name'],
         'license_key': factory.make_name('key'),
     }
     response = self.client.post(reverse('license_keys_handler'), params)
     self.assertEqual(http.client.OK, response.status_code)
     license_key = LicenseKey.objects.get(
         osystem=params['osystem'], distro_series=params['distro_series'])
     self.assertAttributes(license_key, params)
示例#15
0
    def test_settings_commissioning_POST(self):
        self.client_log_in(as_admin=True)
        release = make_rpc_release(can_commission=True)
        osystem = make_rpc_osystem('ubuntu', releases=[release])
        patch_usable_osystems(self, [osystem])

        new_commissioning = release['name']
        response = self.client.post(
            reverse('settings'),
            get_prefixed_form_data(prefix='commissioning',
                                   data={
                                       'commissioning_distro_series':
                                       (new_commissioning),
                                   }))

        self.assertEqual(http.client.FOUND, response.status_code)
        self.assertEqual(
            (new_commissioning, ),
            (Config.objects.get_config('commissioning_distro_series'), ))
示例#16
0
 def test_rejects_when_validate_license_key_for_raise_no_os(self):
     self.client_log_in()
     node = factory.make_Node(owner=self.logged_in_user)
     release = make_rpc_release(requires_license_key=True)
     osystem = make_rpc_osystem(releases=[release])
     patch_usable_osystems(self, osystems=[osystem])
     license_key = factory.make_name('key')
     mock_validate_for = self.patch(forms, 'validate_license_key_for')
     mock_validate_for.side_effect = NoSuchOperatingSystem()
     form = MachineForm(data={
         'architecture':
         make_usable_architecture(self),
         'osystem':
         osystem['name'],
         'distro_series':
         '%s/%s*' % (osystem['name'], release['name']),
         'license_key':
         license_key,
     },
                        instance=node)
     self.assertFalse(form.is_valid())
     self.assertItemsEqual(['license_key'], form._errors.keys())
示例#17
0
 def test_POST_supports_combined_distro_series(self):
     # API allows specifying only distro_series containing both
     # os and series in the "os/series" form.
     self.become_admin()
     release = make_rpc_release(requires_license_key=True)
     osystem = make_rpc_osystem(releases=[release])
     patch_usable_osystems(self, osystems=[osystem])
     self.patch_autospec(forms, 'validate_license_key').return_value = True
     params = {
         'distro_series': "%s/%s" % (osystem['name'], release['name']),
         'license_key': factory.make_name('key'),
     }
     response = self.client.post(reverse('license_keys_handler'), params)
     self.assertEqual(http.client.OK, response.status_code)
     license_key = LicenseKey.objects.get(osystem=osystem['name'],
                                          distro_series=release['name'])
     expected_params = {
         'osystem': osystem['name'],
         'distro_series': release['name'],
         'license_key': params['license_key'],
     }
     self.assertAttributes(license_key, expected_params)
示例#18
0
 def test_can_create_license_key(self):
     self.client.login(user=factory.make_admin())
     osystem = make_osystem_requiring_license_key()
     patch_usable_osystems(self, osystems=[osystem])
     self.patch(forms, 'validate_license_key').return_value = True
     series = osystem['default_release']
     key = factory.make_name('key')
     add_link = reverse('license-key-add')
     definition = {
         'osystem': osystem['name'],
         'distro_series': "%s/%s" % (osystem['name'], series),
         'license_key': key,
     }
     response = self.client.post(add_link, definition)
     self.assertEqual((http.client.FOUND, reverse('settings_license_keys')),
                      (response.status_code, extract_redirect(response)))
     new_license_key = LicenseKey.objects.get(osystem=osystem['name'],
                                              distro_series=series)
     expected_result = {
         'osystem': osystem['name'],
         'distro_series': series,
         'license_key': key,
     }
     self.assertAttributes(new_license_key, expected_result)
示例#19
0
 def test_can_update_license_key(self):
     self.client.login(user=factory.make_admin())
     key = factory.make_LicenseKey()
     osystem = make_osystem_requiring_license_key(key.osystem,
                                                  key.distro_series)
     patch_usable_osystems(self, osystems=[osystem])
     self.patch(forms, 'validate_license_key').return_value = True
     new_key = factory.make_name('key')
     edit_link = reverse('license-key-edit',
                         args=[key.osystem, key.distro_series])
     definition = {
         'osystem': key.osystem,
         'distro_series': "%s/%s" % (key.osystem, key.distro_series),
         'license_key': new_key,
     }
     response = self.client.post(edit_link, definition)
     self.assertEqual((http.client.FOUND, reverse('settings_license_keys')),
                      (response.status_code, extract_redirect(response)))
     expected_result = {
         'osystem': key.osystem,
         'distro_series': key.distro_series,
         'license_key': new_key,
     }
     self.assertAttributes(reload_object(key), expected_result)