def test_settings_contains_names_and_content_of_scripts(self):
     scripts = {
         factory.make_commissioning_script(),
         factory.make_commissioning_script(),
         }
     response = self.client.get(reverse('settings'))
     names = [script.name for script in scripts]
     contents = [script.content for script in scripts]
     self.assertThat(response.content, ContainsAll(names + contents))
Ejemplo n.º 2
0
 def test_raises_if_duplicated_name(self):
     content = factory.getRandomString()
     name = factory.make_name('filename')
     factory.make_commissioning_script(name=name)
     uploaded_file = SimpleUploadedFile(content=content, name=name)
     form = CommissioningScriptForm(files={'content': uploaded_file})
     self.assertEqual(
         (False, {'content': ["A script with that name already exists."]}),
         (form.is_valid(), form._errors))
Ejemplo n.º 3
0
 def test_settings_contains_names_and_content_of_scripts(self):
     scripts = {
         factory.make_commissioning_script(),
         factory.make_commissioning_script(),
     }
     response = self.client.get(reverse('settings'))
     names = [script.name for script in scripts]
     contents = [script.content for script in scripts]
     self.assertThat(response.content, ContainsAll(names + contents))
 def test_settings_contains_links_to_delete_scripts(self):
     scripts = {
         factory.make_commissioning_script(),
         factory.make_commissioning_script(),
         }
     links = get_content_links(self.client.get(reverse('settings')))
     script_delete_links = [
         reverse('commissioning-script-delete', args=[script.id])
         for script in scripts]
     self.assertThat(links, ContainsAll(script_delete_links))
Ejemplo n.º 5
0
 def test_settings_contains_links_to_delete_scripts(self):
     scripts = {
         factory.make_commissioning_script(),
         factory.make_commissioning_script(),
     }
     links = get_content_links(self.client.get(reverse('settings')))
     script_delete_links = [
         reverse('commissioning-script-delete', args=[script.id])
         for script in scripts
     ]
     self.assertThat(links, ContainsAll(script_delete_links))
Ejemplo n.º 6
0
    def test_GET_lists_commissioning_scripts(self):
        # Use lower-case names.  The database and the test may use
        # different collation orders with different ideas about case
        # sensitivity.
        names = {factory.make_name('script').lower() for counter in range(5)}
        for name in names:
            factory.make_commissioning_script(name=name)

        response = self.client.get(self.get_url())

        self.assertEqual((httplib.OK, sorted(names)),
                         (response.status_code, json.loads(response.content)))
Ejemplo n.º 7
0
 def test_GET_is_forbidden(self):
     # It's not inconceivable that commissioning scripts contain
     # credentials of some sort.  There is no need for regular users
     # (consumers of the MAAS) to see these.
     script = factory.make_commissioning_script()
     response = self.client.get(self.get_url(script.name))
     self.assertEqual(httplib.FORBIDDEN, response.status_code)
Ejemplo n.º 8
0
 def test_can_delete_commissioning_script(self):
     script = factory.make_commissioning_script()
     delete_link = reverse('commissioning-script-delete', args=[script.id])
     response = self.client.post(delete_link, {'post': 'yes'})
     self.assertEqual((httplib.FOUND, reverse('settings')),
                      (response.status_code, extract_redirect(response)))
     self.assertFalse(
         CommissioningScript.objects.filter(id=script.id).exists())
Ejemplo n.º 9
0
 def test_get_archive_wraps_all_scripts(self):
     scripts = {factory.make_commissioning_script() for counter in range(3)}
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     self.assertThat(
         archive.getnames(),
         ContainsAll({
             os.path.join(ARCHIVE_PREFIX, script.name)
             for script in scripts
         }))
 def test_can_delete_commissioning_script(self):
     script = factory.make_commissioning_script()
     delete_link = reverse('commissioning-script-delete', args=[script.id])
     response = self.client.post(delete_link, {'post': 'yes'})
     self.assertEqual(
         (httplib.FOUND, reverse('settings')),
         (response.status_code, extract_redirect(response)))
     self.assertFalse(
         CommissioningScript.objects.filter(id=script.id).exists())
Ejemplo n.º 11
0
 def test_get_archive_wraps_all_scripts(self):
     scripts = {factory.make_commissioning_script() for counter in range(3)}
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     self.assertThat(
         archive.getnames(),
         ContainsAll({
             os.path.join(ARCHIVE_PREFIX, script.name)
             for script in scripts
             }))
Ejemplo n.º 12
0
    def test_PUT_updates_contents(self):
        old_content = b'old:%s' % factory.getRandomString().encode('ascii')
        script = factory.make_commissioning_script(content=old_content)
        new_content = b'new:%s' % factory.getRandomString().encode('ascii')

        response = self.client_put(
            self.get_url(script.name),
            {'content': factory.make_file_upload(content=new_content)})
        self.assertEqual(httplib.OK, response.status_code)

        self.assertEqual(new_content, reload_object(script).content)
Ejemplo n.º 13
0
 def test_get_archive_initializes_file_timestamps(self):
     # The mtime on a file inside the tarball is reasonable.
     # It would otherwise default to the Epoch, and GNU tar warns
     # annoyingly about improbably old files.
     start_time = floor(time.time())
     script = factory.make_commissioning_script()
     path = os.path.join(ARCHIVE_PREFIX, script.name)
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     timestamp = archive.getmember(path).mtime
     end_time = ceil(time.time())
     self.assertGreaterEqual(timestamp, start_time)
     self.assertLessEqual(timestamp, end_time)
Ejemplo n.º 14
0
 def test_get_archive_initializes_file_timestamps(self):
     # The mtime on a file inside the tarball is reasonable.
     # It would otherwise default to the Epoch, and GNU tar warns
     # annoyingly about improbably old files.
     start_time = floor(time.time())
     script = factory.make_commissioning_script()
     path = os.path.join(ARCHIVE_PREFIX, script.name)
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     timestamp = archive.getmember(path).mtime
     end_time = ceil(time.time())
     self.assertGreaterEqual(timestamp, start_time)
     self.assertLessEqual(timestamp, end_time)
Ejemplo n.º 15
0
 def test_commissioning_scripts(self):
     script = factory.make_commissioning_script()
     response = make_node_client().get(
         reverse('commissioning-scripts', args=['latest']))
     self.assertEqual(
         httplib.OK, response.status_code, "Unexpected response %d: %s" %
         (response.status_code, response.content))
     self.assertIn(
         response['Content-Type'], {
             'application/tar',
             'application/x-gtar',
             'application/x-tar',
             'application/x-tgz',
         })
     archive = tarfile.open(fileobj=BytesIO(response.content))
     self.assertIn(os.path.join(ARCHIVE_PREFIX, script.name),
                   archive.getnames())
Ejemplo n.º 16
0
 def test_commissioning_scripts(self):
     script = factory.make_commissioning_script()
     response = self.make_node_client().get(
         reverse('commissioning-scripts', args=['latest']))
     self.assertEqual(
         httplib.OK, response.status_code,
         "Unexpected response %d: %s"
         % (response.status_code, response.content))
     self.assertIn(
         response['Content-Type'],
         {
             'application/tar',
             'application/x-gtar',
             'application/x-tar',
             'application/x-tgz',
         })
     archive = tarfile.open(fileobj=BytesIO(response.content))
     self.assertIn(
         os.path.join(ARCHIVE_PREFIX, script.name),
         archive.getnames())
Ejemplo n.º 17
0
 def test_DELETE_deletes_script(self):
     script = factory.make_commissioning_script()
     self.client.delete(self.get_url(script.name))
     self.assertItemsEqual(
         [], CommissioningScript.objects.filter(name=script.name))
Ejemplo n.º 18
0
 def test_get_archive_sets_sensible_mode(self):
     for counter in range(3):
         factory.make_commissioning_script()
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     self.assertEqual({0755}, {info.mode for info in archive.getmembers()})
Ejemplo n.º 19
0
 def test_get_archive_supports_binary_scripts(self):
     script = factory.make_commissioning_script(content=sample_binary_data)
     path = os.path.join(ARCHIVE_PREFIX, script.name)
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     self.assertEqual(script.content, archive.extractfile(path).read())
Ejemplo n.º 20
0
 def test_get_archive_supports_binary_scripts(self):
     script = factory.make_commissioning_script(content=sample_binary_data)
     path = os.path.join(ARCHIVE_PREFIX, script.name)
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     self.assertEqual(script.content, archive.extractfile(path).read())
Ejemplo n.º 21
0
 def test_get_archive_wraps_scripts_in_tar(self):
     script = factory.make_commissioning_script()
     path = os.path.join(ARCHIVE_PREFIX, script.name)
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     self.assertTrue(archive.getmember(path).isfile())
     self.assertEqual(script.content, archive.extractfile(path).read())
Ejemplo n.º 22
0
 def test_get_archive_sets_sensible_mode(self):
     for counter in range(3):
         factory.make_commissioning_script()
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     self.assertEqual({0755}, {info.mode for info in archive.getmembers()})
Ejemplo n.º 23
0
 def test_get_archive_wraps_scripts_in_tar(self):
     script = factory.make_commissioning_script()
     path = os.path.join(ARCHIVE_PREFIX, script.name)
     archive = open_tarfile(CommissioningScript.objects.get_archive())
     self.assertTrue(archive.getmember(path).isfile())
     self.assertEqual(script.content, archive.extractfile(path).read())
Ejemplo n.º 24
0
 def test_GET_returns_script_contents(self):
     script = factory.make_commissioning_script()
     response = self.client.get(self.get_url(script.name))
     self.assertEqual(httplib.OK, response.status_code)
     self.assertEqual(script.content, response.content)
Ejemplo n.º 25
0
 def test_DELETE_is_forbidden(self):
     script = factory.make_commissioning_script()
     response = self.client_put(self.get_url(script.name))
     self.assertEqual(httplib.FORBIDDEN, response.status_code)
Ejemplo n.º 26
0
 def test_PUT_is_forbidden(self):
     script = factory.make_commissioning_script()
     response = self.client_put(self.get_url(script.name),
                                {'content': factory.getRandomString()})
     self.assertEqual(httplib.FORBIDDEN, response.status_code)
Ejemplo n.º 27
0
 def test_GET_preserves_binary_data(self):
     script = factory.make_commissioning_script(content=sample_binary_data)
     response = self.client.get(self.get_url(script.name))
     self.assertEqual(httplib.OK, response.status_code)
     self.assertEqual(sample_binary_data, response.content)