Ejemplo n.º 1
0
    def test_valid_trusted(self):
        """
        Chain of trust:
        1. Zone created by this device
        2. Another device joins (no central server) through an invitation
        """
        own_device = Device.get_own_device()
        zone = Zone(name="test_zone")
        zone.save()

        new_device = Device(name="new_device")  # make a new device
        new_device.set_key(Key())
        new_device.save()  # get an ID
        new_device.get_metadata().save()

        # Now create an invitation, and claim that invitation for the new device.
        invitation = ZoneInvitation.generate(zone=zone, invited_by=own_device)
        invitation.claim(used_by=new_device)
        self.assertEqual(invitation.used_by, new_device, "Invitation should now be used by device %s" % new_device)
        self.assertEqual(DeviceZone.objects.filter(device=new_device).count(), 1, "There should be a DeviceZone for device %s" % new_device)
        self.assertEqual(DeviceZone.objects.get(device=new_device).zone, zone, "DeviceZone for device %s should be zone %s" % (new_device, zone))

        # Now get a chain of trust establishing the new device on the zone
        chain = ChainOfTrust(zone=zone, device=new_device)
        self.assertTrue(chain.verify(), "Chain of trust should verify.")
Ejemplo n.º 2
0
    def test_invalid_invitation(self):
        """
        Chain of trust:
        1. Zone created by this device
        2. Another device joins (no central server) without an invitation--assert!
        """
        own_device = Device.get_own_device()

        call_command("generate_zone")  # put own_device on a zone
        zone = Zone.objects.all()[0]

        new_device = Device(name="new_device")  # make a new device
        new_device.set_key(Key())
        new_device.save()  # get an ID
        new_device.get_metadata().save()

        # Now create an illegal invitation--one that's not signed by the zone creator
        with self.assertRaises(ValidationError):
            ZoneInvitation.generate(zone=zone, invited_by=new_device)

        #
        invitation = ZoneInvitation(zone=zone, invited_by=new_device)
        with self.assertRaises(ValidationError):
            invitation.set_key(Key())
    def __init__(self, *args, **kwargs):
        self.distributed_dir = (pathlib.Path(settings.PROJECT_PATH).parent /
                                'ka-lite-submodule' / 'kalite')
        self.manage_py_path = self.distributed_dir / 'manage.py'

        uniq_name = 'settings_' + ''.join(
            choice(string.ascii_lowercase) for _ in range(10))
        self.db_path = ((self.distributed_dir / 'database' /
                         uniq_name).with_suffix('.sqlite'))

        self.key = kwargs.pop("key", None) or Key()

        # setup for custom settings for this distributed server
        self.settings_name = uniq_name
        self.settings_contents = self._generate_settings(**kwargs)
        self.settings_path = ((self.distributed_dir /
                               self.settings_name).with_suffix('.py'))

        self.running_process = None