• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2024 The Chromium Authors
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5from __future__ import annotations
6
7import argparse
8import datetime as dt
9import unittest
10
11from crossbench.action_runner.action.get import GetAction
12from crossbench.benchmarks.loading.config.blocks import ActionBlock
13from crossbench.benchmarks.loading.config.login.custom import LoginBlock
14from crossbench.benchmarks.loading.config.login.google import GoogleLogin
15from tests import test_helper
16
17
18class ActionBlockTestCase(unittest.TestCase):
19
20  def test_create_empty_invalid(self):
21    with self.assertRaises(argparse.ArgumentTypeError):
22      ActionBlock()
23
24  def test_single_action(self):
25    action = GetAction("http://test.com", duration=dt.timedelta(seconds=3))
26    block = ActionBlock(actions=(action,))
27    self.assertTrue(bool(block))
28    self.assertFalse(block.is_login)
29    self.assertEqual(len(block), 1)
30    self.assertTupleEqual(tuple(block), (action,))
31    self.assertEqual(block.duration, dt.timedelta(seconds=3))
32
33    block = ActionBlock.parse(block.to_json())
34    self.assertTrue(bool(block))
35    self.assertFalse(block.is_login)
36    self.assertEqual(len(block), 1)
37    self.assertEqual(block.duration, dt.timedelta(seconds=3))
38
39  def test_multi_action(self):
40    action_2 = GetAction("http://test.com/0", duration=dt.timedelta(seconds=1))
41    action_1 = GetAction("http://test.com/1", duration=dt.timedelta(seconds=2))
42    block = ActionBlock(actions=(action_1, action_2))
43    self.assertTrue(bool(block))
44    self.assertFalse(block.is_login)
45    self.assertEqual(len(block), 2)
46    self.assertTupleEqual(tuple(block), (action_1, action_2))
47    self.assertEqual(block.duration, dt.timedelta(seconds=3))
48
49    block = ActionBlock.parse(block.to_json())
50    self.assertTrue(bool(block))
51    self.assertFalse(block.is_login)
52    self.assertEqual(len(block), 2)
53    self.assertEqual(block.duration, dt.timedelta(seconds=3))
54
55
56class LoginBlockTestCase(unittest.TestCase):
57
58  def test_single_action(self):
59    action = GetAction("http://test.com", duration=dt.timedelta(seconds=3))
60    block = LoginBlock(actions=(action,))
61    self.assertTrue(bool(block))
62    self.assertTrue(block.is_login)
63    self.assertEqual(len(block), 1)
64    self.assertTupleEqual(tuple(block), (action,))
65    self.assertEqual(block.duration, dt.timedelta(seconds=3))
66
67    block = LoginBlock.parse(block.to_json())
68    self.assertTrue(bool(block))
69    self.assertTrue(block.is_login)
70    self.assertEqual(len(block), 1)
71    self.assertEqual(block.duration, dt.timedelta(seconds=3))
72
73  def test_multi_action(self):
74    action_2 = GetAction("http://test.com/0", duration=dt.timedelta(seconds=1))
75    action_1 = GetAction("http://test.com/1", duration=dt.timedelta(seconds=2))
76    block = LoginBlock(actions=(action_1, action_2))
77    self.assertTrue(bool(block))
78    self.assertTrue(block.is_login)
79    self.assertEqual(len(block), 2)
80    self.assertTupleEqual(tuple(block), (action_1, action_2))
81    self.assertEqual(block.duration, dt.timedelta(seconds=3))
82
83    block = LoginBlock.parse(block.to_json())
84    self.assertTrue(bool(block))
85    self.assertTrue(block.is_login)
86    self.assertEqual(len(block), 2)
87    self.assertEqual(block.duration, dt.timedelta(seconds=3))
88
89
90class PresetLoginBlockTestCase(unittest.TestCase):
91
92  def test_google_login_block(self):
93    block = GoogleLogin()
94    self.assertTrue(bool(block))
95    self.assertTrue(block.is_login)
96    self.assertEqual(len(block), 1)
97
98
99if __name__ == "__main__":
100  test_helper.run_pytest(__file__)
101