def test_commissioning_high_random_address(self): # One of the devices is persistently going to pick 0xffffff as # its random address gear = [fakes.Gear() for x in range(9)] gear.append(fakes.Gear(random_preload=[0xffffff] * 10)) bus = fakes.Bus(gear) bus.run_sequence(sequences.Commissioning()) self._check_addresses(gear)
def test_commissioning_clash(self): # (At least) one of the devices is going to pick the same # "random" number as another the first time around! randoms = list(range(0, 0xffffff, 0x82000)) randoms[8] = randoms[4] gear = [fakes.Gear(random_preload=[x]) for x in randoms] bus = fakes.Bus(gear) bus.run_sequence(sequences.Commissioning()) self._check_addresses(gear)
def test_set_groups(self): gear = [fakes.Gear(shortaddr=x, groups={x}) for x in range(0, 16)] bus = fakes.Bus(gear) tp = {1, 3, 5, 7, 8, 9, 10, 13} for i in range(0, 16): bus.run_sequence(sequences.SetGroups(i, tp)) self.assertEqual(bus.run_sequence(sequences.QueryGroups(i)), tp) tp = {0, 4, 7} bus.run_sequence(sequences.SetGroups(address.Broadcast(), tp)) for i in range(0, 16): bus.run_sequence(sequences.SetGroups(i, tp)) self.assertEqual(bus.run_sequence(sequences.QueryGroups(i)), tp)
def test_commissioning_restricted_addresses(self): # There aren't going to be enough addresses to go around gear = [fakes.Gear() for x in range(10)] bus = fakes.Bus(gear) available = range(10, 15) bus.run_sequence( sequences.Commissioning(available_addresses=available)) missed = 0 for g in gear: if g.shortaddr is None: missed += 1 else: self.assertIn(g.shortaddr, available) self.assertEqual(missed, 5)
def test_querydevicetypes(self): testcases = [ [1, 3, 6], [6], [], [252, 253], ] bus = fakes.Bus([ fakes.Gear(shortaddr=a, devicetypes=dts) for a, dts in enumerate(testcases) ]) for a, dts in enumerate(testcases): r = bus.run_sequence(sequences.QueryDeviceTypes(a)) self.assertEqual(r, dts)
def test_commissioning(self): gear = [fakes.Gear() for x in range(10)] bus = fakes.Bus(gear) bus.run_sequence(sequences.Commissioning()) self._check_addresses(gear) # Now add another 10 unaddressed devices to the bus, and # change the address of one of the original 10 to 30 gear[5].shortaddr = 30 for x in range(10): bus.gear.append(fakes.Gear()) bus.run_sequence(sequences.Commissioning()) self._check_addresses(gear, [x for x in range(19)] + [30]) bus.run_sequence(sequences.Commissioning(readdress=True, dry_run=True)) self._check_addresses(gear, [x for x in range(19)] + [30]) bus.run_sequence(sequences.Commissioning(readdress=True)) self._check_addresses(gear)
def test_query_groups(self): gear = [fakes.Gear(shortaddr=x, groups={x}) for x in range(0, 16)] bus = fakes.Bus(gear) for i in range(0, 16): self.assertEqual(bus.run_sequence(sequences.QueryGroups(i)), {i})
def test_querydevicetypes_out_of_order(self): bus = fakes.Bus([fakes.Gear(shortaddr=1, devicetypes=[3, 2, 1])]) self.assertRaises(sequences.DALISequenceError, bus.run_sequence, sequences.QueryDeviceTypes(0))
def test_querydevicetypes_noresponse(self): bus = fakes.Bus([]) self.assertRaises(sequences.DALISequenceError, bus.run_sequence, sequences.QueryDeviceTypes(0))