def test_sonyflake_epoch(self):
     sf = SonyFlake(start_time=SONYFLAKE_EPOCH)
     self.assertEqual(sf.start_time, 140952960000)
     next_id = sf.next_id()
     parts = SonyFlake.decompose(next_id)
     self.assertEqual(parts["msb"], 0)
     self.assertEqual(parts["machine_id"], self.machine_id)
     self.assertEqual(parts["sequence"], 0)
 def test_sonyflake_once(self):
     sleep_time = randint(1, 50)
     self._sleep(sleep_time)
     next_id = self.sf.next_id()
     parts = SonyFlake.decompose(next_id)
     self.assertEqual(parts["msb"], 0)
     self.assertTrue(sleep_time <= parts["time"] <= sleep_time + 1)
     self.assertEqual(parts["sequence"], 0)
     self.assertEqual(parts["machine_id"], self.machine_id)
    def test_sonyflake_custom_machine_id(self):
        machine_id = randint(1, 255**2)

        def get_machine_id():
            return machine_id

        sf = SonyFlake(machine_id=get_machine_id)
        next_id = sf.next_id()
        parts = SonyFlake.decompose(next_id)
        self.assertEqual(parts["machine_id"], machine_id)
 def test_sonyflake_for_10sec(self):
     last_id = 0
     current = initial = self._current_time()
     max_sequence = 0
     while (current - initial) < 1000:
         next_id = self.sf.next_id()
         parts = SonyFlake.decompose(next_id)
         self.assertLess(last_id, next_id, "Duplicated id")
         current = self._current_time()
         last_id = next_id
         self.assertEqual(parts["msb"], 0)
         self.assertEqual(parts["machine_id"], self.machine_id)
         overtime = self.start_time + (parts["time"] - current)
         self.assertLessEqual(overtime, 0, "Unexpected overtime.")
         max_sequence = max(max_sequence, parts["sequence"])
     self.assertEqual(max_sequence, (1 << BIT_LEN_SEQUENCE) - 1,
                      "Unexpected max sequence")