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