def test_get_user_windowed_partial_window(self):
        now = int(datetime.utcnow().timestamp())
        Database.set_meta("start_time", now)
        Database.set_meta("contest_duration", 1000)
        Database.set_meta("window_duration", 100)

        Database.add_user("token", "", "")
        Database.set_start_delay("token", 990)
        Database.add_task("poldo", "", "", 42, 1)
        Database.add_user_task("token", "poldo")
        Database.add_input("inputid", "token", "poldo", 1, "/path", 42)
        Database.set_user_attempt("token", "poldo", 1)

        res = self.handler.get_user(token="token", _ip="1.1.1.1")
        end_time = datetime.fromtimestamp(now + 1000, timezone.utc).isoformat()
        self.assertEqual(end_time, res["end_time"])
Beispiel #2
0
    def test_get_user_windowed_almost_finished(self):
        now = int(datetime.datetime.now().timestamp())
        Database.set_meta("start_time", now - 90)
        Database.set_meta("contest_duration", 1000)
        Database.set_meta("window_duration", 100)

        Database.add_user("token", "", "")
        Database.set_start_delay("token", 10)
        Database.add_task("poldo", "", "", 42, 1)
        Database.add_user_task("token", "poldo")
        Database.add_input("inputid", "token", "poldo", 1, "/path", 42)
        Database.set_user_attempt("token", "poldo", 1)

        res = self.handler.get_user(token="token", _ip="1.1.1.1")
        end_time = datetime.datetime.fromtimestamp(now + 20).strftime(
            '%Y-%m-%dT%H:%M:%S')
        self.assertEqual(end_time, res["end_time"])
Beispiel #3
0
 def _ensure_window_start(token):
     """
     Makes sure that the window of the user has been started
     :param token: The token of the user
     :return: True if the user has been updated
     """
     if not Database.get_meta("window_duration", None):
         return False
     user = Database.get_user(token)
     if not user:
         return False
     start_delay = user["contest_start_delay"]
     if start_delay is not None:
         return False
     start = Database.get_meta("start_time", type=int)
     if start is None:
         return False
     now = time.time()
     delay = now - start
     Database.set_start_delay(token, delay)
     Logger.info("WINDOW_START", "Contest started for %s after %d" % (token, delay))
     return True