Ejemplo n.º 1
0
 def test_juno_vexpress_valid_template(self):
     name = "juno-r2"
     dt = DeviceType(name=name)
     dt.save()
     dt.refresh_from_db()
     device = Device(device_type=dt,
                     hostname="juno-r2-01",
                     health=Device.HEALTH_GOOD)
     device.save()
     device.refresh_from_db()
     self.assertIsNotNone(
         [d for d in Device.objects.filter(device_type=dt)])
     for device_file in os.listdir(settings.DEVICE_TYPES_PATH):
         if device_file == "juno-r2.jinja2":
             self.fail(
                 "Configuration error - %s.jinja2 should NOT exist in %s" %
                 (name, settings.DEVICE_TYPES_PATH))
     self.assertTrue(settings.DEVICES_PATH.startswith(self.basedir))
     self.assertEqual("juno-r2-01", device.hostname)
     self.assertIsNotNone(device.load_configuration())
     self.assertEqual(
         [device],
         [device for device in Device.objects.filter(device_type=dt)])
     self.assertEqual("juno", device.get_extends())
     self.assertFalse(
         bool(load_devicetype_template(device.device_type.name)))
     self.assertFalse(invalid_template(device.device_type))
Ejemplo n.º 2
0
 def test_device_table_hidden(self):
     hidden = DeviceType(name="hidden", owners_only=True)
     hidden.save()  # pylint: disable=no-member
     device = Device(device_type=hidden, hostname='hidden1')
     device.save()  # pylint: disable=no-member
     view = TestDeviceView(None)
     self.assertEqual(len(view.get_queryset()), 0)
Ejemplo n.º 3
0
 def test_device_table_hidden(self):
     hidden = DeviceType(name="hidden", owners_only=True)
     hidden.save()  # pylint: disable=no-member
     device = Device(device_type=hidden, hostname='hidden1', status=Device.OFFLINE)
     device.save()  # pylint: disable=no-member
     view = TestDeviceView(None)
     self.assertEqual(len(view.get_queryset()), 0)
Ejemplo n.º 4
0
 def test_bbb_valid_template(self):
     name = "beaglebone-black"
     dt = DeviceType(name=name)
     dt.save()
     dt.refresh_from_db()
     device = Device(device_type=dt,
                     hostname="bbb-01",
                     health=Device.HEALTH_GOOD)
     device.save()
     device.refresh_from_db()
     self.assertIsNotNone(
         [d for d in Device.objects.filter(device_type=dt)])
     self.assertTrue(settings.DEVICES_PATH.startswith(self.basedir))
     found = False
     for device_file in os.listdir(settings.DEVICE_TYPES_PATH):
         if device_file == "%s.jinja2" % name:
             found = True
             break
     if not found:
         self.fail("Configuration error - %s.jinja2 should exist in %s" %
                   (name, settings.DEVICE_TYPES_PATH))
     self.assertIsNotNone([device in Device.objects.filter(device_type=dt)])
     self.assertIsNotNone(device.load_configuration())
     self.assertTrue(bool(load_devicetype_template(
         device.device_type.name)))
     self.assertFalse(invalid_template(device.device_type))
Ejemplo n.º 5
0
 def test_device_table_view(self):
     device_type = DeviceType(name="generic")
     device_type.save()  # pylint: disable=no-member
     device = Device(device_type=device_type, hostname="generic1")
     device.save()  # pylint: disable=no-member
     view = TestDeviceView(None)
     self.assertEqual(len(view.get_queryset()), 1)
 def test_device_table_hidden(self):
     hidden = DeviceType(name="hidden", owners_only=True, health_check_job='')
     hidden.save()
     device = Device(device_type=hidden, hostname='hidden1', status=Device.OFFLINE)
     device.save()
     view = TestDeviceView(None)
     self.assertEqual(len(view.get_queryset()), 0)
Ejemplo n.º 7
0
    def add(
        self,
        name,
        description,
        display,
        owners_only,
        health_frequency,
        health_denominator,
    ):
        """
        Name
        ----
        `scheduler.device_types.add` (`name`, `description`, `display`, `owners_only`, `health_frequency`, health_denominator`)

        Description
        -----------
        [superuser only]
        Add a new device-type to the database. Devices will need a suitable
        template to use the new device-type.

        Arguments
        ---------
        `name`: string
          Name of the device-type
        `description`: string
          Device-type description
        `display`: bool
          Is the device-type displayed in the GUI?
        `owners_only`: bool
          DEPRECATED: this field is not used any more
        `health_frequency`: int
          How often to run health checks
        `health_denominator`: string ("hours" or "jobs")
          Initiate health checks by hours or by jobs

        Return value
        ------------
        None
        """
        if health_denominator == "hours":
            health_denominator = DeviceType.HEALTH_PER_HOUR
        elif health_denominator == "jobs":
            health_denominator = DeviceType.HEALTH_PER_JOB
        else:
            raise xmlrpc.client.Fault(
                400, "Bad request: invalid health_denominator.")

        try:
            dt = DeviceType(
                name=name,
                description=description,
                display=display,
                health_frequency=health_frequency,
                health_denominator=health_denominator,
            )
            dt.full_clean()
            dt.save()
        except (IntegrityError, ValidationError):
            raise xmlrpc.client.Fault(
                400, "Bad request: device-type name is already used.")
Ejemplo n.º 8
0
    def test_device_permissions_test(self):
        dt = DeviceType(name="type1")
        dt.save()
        device = Device(device_type=dt, hostname="device1")
        device.save()

        group = self.factory.make_group()
        user1 = self.factory.make_user()
        user1.groups.add(group)

        group2 = self.factory.make_group()
        user2 = self.factory.make_user()
        user2.groups.add(group2)

        GroupDevicePermission.objects.assign_perm("submit_to_device", group,
                                                  device)
        self.assertEqual(device.can_submit(user2), False)
        self.assertEqual(device.can_submit(user1), True)
        GroupDevicePermission.objects.remove_perm("submit_to_device", group,
                                                  device)
        delattr(user1, "_cached_has_perm")
        delattr(user2, "_cached_has_perm")

        self.assertEqual(device.can_view(user2), True)
        self.assertEqual(device.can_view(user1), True)

        GroupDeviceTypePermission.objects.assign_perm("view_devicetype", group,
                                                      dt)
        delattr(user1, "_cached_has_perm")
        delattr(user2, "_cached_has_perm")
        self.assertEqual(device.can_view(user2), False)
        self.assertEqual(device.can_view(user1), True)

        GroupDeviceTypePermission.objects.remove_perm("view_devicetype", group,
                                                      dt)
        GroupDevicePermission.objects.assign_perm("view_device", group, device)
        delattr(user1, "_cached_has_perm")
        delattr(user2, "_cached_has_perm")
        self.assertEqual(device.can_view(user2), False)
        self.assertEqual(device.can_view(user1), True)

        GroupDevicePermission.objects.assign_perm("view_device", group2,
                                                  device)
        delattr(user1, "_cached_has_perm")
        delattr(user2, "_cached_has_perm")
        self.assertEqual(device.can_view(user2), True)
        self.assertEqual(device.can_view(user1), True)

        device.health = Device.HEALTH_RETIRED
        device.save()
        self.assertEqual(device.can_submit(user2), False)
        self.assertEqual(device.can_submit(user1), False)

        # Test that global permission works as intended.
        user3 = self.factory.make_user()
        user3.user_permissions.add(
            Permission.objects.get(codename="change_device"))
        self.assertEqual(device.can_change(user3), True)
Ejemplo n.º 9
0
 def test_device_table_view(self):
     device_type = DeviceType(name="generic", owners_only=False)
     device_type.save()  # pylint: disable=no-member
     device = Device(device_type=device_type, hostname='generic1', status=Device.OFFLINE)
     user = self.make_user()
     device.user = user
     device.save()  # pylint: disable=no-member
     view = TestDeviceView(None)
     self.assertEqual(len(view.get_queryset()), 1)
 def test_device_table_view(self):
     device_type = DeviceType(name="generic", owners_only=False, health_check_job='')
     device_type.save()
     device = Device(device_type=device_type, hostname='generic1', status=Device.OFFLINE)
     user = self.make_user()
     device.user = user
     device.save()
     view = TestDeviceView(None)
     self.assertEqual(len(view.get_queryset()), 1)
Ejemplo n.º 11
0
 def test_device_table_view(self):
     device_type = DeviceType(name="generic", owners_only=False)
     device_type.save()  # pylint: disable=no-member
     device = Device(device_type=device_type, hostname='generic1')
     user = self.make_user()
     device.user = user
     device.save()  # pylint: disable=no-member
     view = TestDeviceView(None)
     self.assertEqual(len(view.get_queryset()), 1)
Ejemplo n.º 12
0
 def test_unknown_invalid_template(self):
     name = "nowhere-never-skip"
     dt = DeviceType(name=name)
     dt.save()
     dt.refresh_from_db()
     device = Device(device_type=dt, hostname="test-01", health=Device.HEALTH_GOOD)
     device.save()
     device.refresh_from_db()
     self.assertIsNotNone([d for d in Device.objects.filter(device_type=dt)])
     self.assertIsNone(device.load_configuration())
     self.assertIsNotNone([device in Device.objects.filter(device_type=dt)])
     self.assertFalse(bool(load_devicetype_template(device.device_type.name)))
     self.assertTrue(invalid_template(device.device_type))
Ejemplo n.º 13
0
 def test_bbb_valid_template(self):
     name = "beaglebone-black"
     dt = DeviceType(name=name)
     dt.save()
     dt.refresh_from_db()
     device = Device(device_type=dt, hostname="bbb-01", health=Device.HEALTH_GOOD)
     device.save()
     device.refresh_from_db()
     self.assertIsNotNone([d for d in Device.objects.filter(device_type=dt)])
     self.assertTrue(File("device-type").exists(f"{name}.jinja2"))
     self.assertIsNotNone([device in Device.objects.filter(device_type=dt)])
     self.assertIsNotNone(device.load_configuration())
     self.assertTrue(bool(load_devicetype_template(device.device_type.name)))
     self.assertFalse(invalid_template(device.device_type))
Ejemplo n.º 14
0
    def test_active_device_types(self):
        name = "beaglebone-black"
        dt = DeviceType(name=name)
        dt.save()
        dt.refresh_from_db()
        device = Device(device_type=dt,
                        hostname='bbb-01',
                        health=Device.HEALTH_GOOD)
        device.save()
        device = Device(device_type=dt,
                        hostname='bbb-02',
                        health=Device.HEALTH_RETIRED)
        device.save()

        name = "juno-r2"
        dt = DeviceType(name=name)
        dt.save()
        dt.refresh_from_db()
        device = Device(device_type=dt,
                        hostname='juno-r2-01',
                        health=Device.HEALTH_RETIRED)
        device.save()

        name = "juno"
        dt = DeviceType(name=name)
        dt.display = False
        dt.save()
        dt.refresh_from_db()
        dt.refresh_from_db()
        device = Device(device_type=dt,
                        hostname='juno-01',
                        health=Device.HEALTH_UNKNOWN)
        device.save()

        name = "qemu"
        dt = DeviceType(name=name)
        dt.save()
        dt.refresh_from_db()
        device = Device(device_type=dt,
                        hostname='qemu-01',
                        health=Device.HEALTH_GOOD)
        device.save()

        self.assertEqual(
            {'bbb-01', 'bbb-02', 'juno-r2-01', 'qemu-01', 'juno-01'},
            set(Device.objects.all().values_list('hostname', flat=True)))

        self.assertEqual({'beaglebone-black', 'juno', 'juno-r2', 'qemu'},
                         set(DeviceType.objects.values_list('name',
                                                            flat=True)))

        # exclude juno-r2 because all devices of that device-type are retired.
        # exclude juno because the device_type is set to not be displayed.
        # include beaglebone-black because not all devices of that type are retired.
        # include qemu because none of the devices of that type are retired.
        self.assertEqual({'beaglebone-black', 'qemu'},
                         set(active_device_types().values_list('name',
                                                               flat=True)))
Ejemplo n.º 15
0
 def test_retired_invalid_template(self):
     name = "beaglebone-black"
     dt = DeviceType(name=name)
     dt.save()
     dt.refresh_from_db()
     device = Device(device_type=dt, hostname="bbb-01", health=Device.HEALTH_RETIRED)
     device.save()
     device.refresh_from_db()
     self.assertEqual(
         [],
         list(
             Device.objects.filter(
                 Q(device_type=dt), ~Q(health=Device.HEALTH_RETIRED)
             )
         ),
     )
     self.assertIsNotNone([d for d in Device.objects.filter(device_type=dt)])
     self.assertFalse(invalid_template(device.device_type))
Ejemplo n.º 16
0
 def test_unknown_invalid_template(self):
     name = "nowhere-never-skip"
     dt = DeviceType(name=name)
     dt.save()
     dt.refresh_from_db()
     device = Device(device_type=dt, hostname='test-01', health=Device.HEALTH_GOOD)
     device.save()
     device.refresh_from_db()
     self.assertIsNotNone([d for d in Device.objects.filter(device_type=dt)])
     self.assertTrue(Device.CONFIG_PATH.startswith(self.basedir))
     found = False
     for device_file in os.listdir(self.types_dir):
         if device_file == '%s.jinja2' % name:
             self.fail("Configuration error - %s.jinja2 should NOT exist in %s" % (name, self.types_dir))
     self.assertIsNone(device.load_configuration())
     self.assertIsNotNone([device in Device.objects.filter(device_type=dt)])
     self.assertFalse(bool(load_devicetype_template(device.device_type.name)))
     self.assertTrue(invalid_template(device.device_type))
Ejemplo n.º 17
0
 def test_juno_vexpress_valid_template(self):
     name = "juno-r2"
     dt = DeviceType(name=name)
     dt.save()
     dt.refresh_from_db()
     device = Device(device_type=dt, hostname='juno-r2-01', health=Device.HEALTH_GOOD)
     device.save()
     device.refresh_from_db()
     self.assertIsNotNone([d for d in Device.objects.filter(device_type=dt)])
     for device_file in os.listdir(self.types_dir):
         if device_file == 'juno-r2.jinja2':
             self.fail("Configuration error - %s.jinja2 should NOT exist in %s" % (name, self.types_dir))
     self.assertTrue(Device.CONFIG_PATH.startswith(self.basedir))
     self.assertEqual('juno-r2-01', device.hostname)
     self.assertIsNotNone(device.load_configuration())
     self.assertEqual([device], [device for device in Device.objects.filter(device_type=dt)])
     self.assertEqual('juno', device.get_extends())
     self.assertFalse(bool(load_devicetype_template(device.device_type.name)))
     self.assertFalse(invalid_template(device.device_type))
Ejemplo n.º 18
0
 def test_juno_vexpress_valid_template(self):
     name = "juno-r2"
     dt = DeviceType(name=name)
     dt.save()
     dt.refresh_from_db()
     device = Device(
         device_type=dt, hostname="juno-r2-01", health=Device.HEALTH_GOOD
     )
     device.save()
     device.refresh_from_db()
     self.assertIsNotNone([d for d in Device.objects.filter(device_type=dt)])
     self.assertFalse(File("device-type").exists("juno-r2.jinja2"))
     self.assertEqual("juno-r2-01", device.hostname)
     self.assertIsNotNone(device.load_configuration())
     self.assertEqual(
         [device], [device for device in Device.objects.filter(device_type=dt)]
     )
     self.assertEqual("juno", device.get_extends())
     self.assertFalse(bool(load_devicetype_template(device.device_type.name)))
     self.assertFalse(invalid_template(device.device_type))
Ejemplo n.º 19
0
 def test_unknown_invalid_template(self):
     name = "nowhere-never-skip"
     dt = DeviceType(name=name)
     dt.save()
     dt.refresh_from_db()
     device = Device(device_type=dt,
                     hostname="test-01",
                     health=Device.HEALTH_GOOD)
     device.save()
     device.refresh_from_db()
     self.assertIsNotNone(
         [d for d in Device.objects.filter(device_type=dt)])
     self.assertTrue(Device.CONFIG_PATH.startswith(self.basedir))
     found = False
     for device_file in os.listdir(self.types_dir):
         if device_file == "%s.jinja2" % name:
             self.fail(
                 "Configuration error - %s.jinja2 should NOT exist in %s" %
                 (name, self.types_dir))
     self.assertIsNone(device.load_configuration())
     self.assertIsNotNone([device in Device.objects.filter(device_type=dt)])
     self.assertFalse(
         bool(load_devicetype_template(device.device_type.name)))
     self.assertTrue(invalid_template(device.device_type))