2121class CpuLoadTest extends TestCase
2222{
2323
24- /**
25- * @dataProvider cpuLoadDataProvider
26- */
27- public function testCpuLoadsAndCheckStatus (
28- float $ loadLastMinute ,
29- float $ loadLastFiveMinutes ,
30- float $ loadLastFifteenMinutes ,
31- CheckStatus $ expectedStatus ,
32- string $ message = ''
33- ): void {
24+ public function testCpuLoadsAndCheckStatus (): void
25+ {
3426 /** @var ObjectManager $objectManager */
3527 $ objectManager = Bootstrap::getObjectManager ();
36- $ cpuLoadUtilsMock = $ this ->getCpuLoadUtilsMock (
37- $ loadLastMinute ,
38- $ loadLastFiveMinutes ,
39- $ loadLastFifteenMinutes
40- );
41-
42- $ objectManager ->addSharedInstance ($ cpuLoadUtilsMock , CpuLoadUtils::class);
28+
29+ // Test data for consecutive calls
30+ $ testCases = [
31+ ['loads ' => [1 , 1 , 1 ], 'expectedStatus ' => CheckStatus::STATUS_OK , 'message ' => 'All loads are below 1: OK ' ],
32+ ['loads ' => [20 , 1 , 1 ], 'expectedStatus ' => CheckStatus::STATUS_WARNING , 'message ' => 'Load last minute is 20: warning ' ],
33+ ['loads ' => [1 , 20 , 1 ], 'expectedStatus ' => CheckStatus::STATUS_WARNING , 'message ' => 'Load last five minutes is 20: warning ' ],
34+ ['loads ' => [1 , 1 , 20 ], 'expectedStatus ' => CheckStatus::STATUS_WARNING , 'message ' => 'Load last fifteen minutes is 20: warning ' ],
35+ ['loads ' => [20 , 20 , 20 ], 'expectedStatus ' => CheckStatus::STATUS_WARNING , 'message ' => 'All loads are above 20: warning ' ],
36+ ];
37+
38+ // Create five separate CpuLoadResults mocks - one for each test case
39+ /** @var CpuLoadResults & MockObject $result1Mock */
40+ $ result1Mock = $ this ->createMock (CpuLoadResults::class);
41+ $ result1Mock ->method ('getLoadLastMinute ' )->willReturn (1 );
42+ $ result1Mock ->method ('getLoadLastFiveMinutes ' )->willReturn (1 );
43+ $ result1Mock ->method ('getLoadLastFifteenMinutes ' )->willReturn (1 );
44+
45+ /** @var CpuLoadResults & MockObject $result2Mock */
46+ $ result2Mock = $ this ->createMock (CpuLoadResults::class);
47+ $ result2Mock ->method ('getLoadLastMinute ' )->willReturn (20 );
48+ $ result2Mock ->method ('getLoadLastFiveMinutes ' )->willReturn (1 );
49+ $ result2Mock ->method ('getLoadLastFifteenMinutes ' )->willReturn (1 );
50+
51+ /** @var CpuLoadResults & MockObject $result3Mock */
52+ $ result3Mock = $ this ->createMock (CpuLoadResults::class);
53+ $ result3Mock ->method ('getLoadLastMinute ' )->willReturn (1 );
54+ $ result3Mock ->method ('getLoadLastFiveMinutes ' )->willReturn (20 );
55+ $ result3Mock ->method ('getLoadLastFifteenMinutes ' )->willReturn (1 );
56+
57+ /** @var CpuLoadResults & MockObject $result4Mock */
58+ $ result4Mock = $ this ->createMock (CpuLoadResults::class);
59+ $ result4Mock ->method ('getLoadLastMinute ' )->willReturn (1 );
60+ $ result4Mock ->method ('getLoadLastFiveMinutes ' )->willReturn (1 );
61+ $ result4Mock ->method ('getLoadLastFifteenMinutes ' )->willReturn (20 );
62+
63+ /** @var CpuLoadResults & MockObject $result5Mock */
64+ $ result5Mock = $ this ->createMock (CpuLoadResults::class);
65+ $ result5Mock ->method ('getLoadLastMinute ' )->willReturn (20 );
66+ $ result5Mock ->method ('getLoadLastFiveMinutes ' )->willReturn (20 );
67+ $ result5Mock ->method ('getLoadLastFifteenMinutes ' )->willReturn (20 );
68+
69+ /** @var CpuLoadUtils & MockObject $cpuLoadUtilsMock */
70+ $ cpuLoadUtilsMock = $ this ->createMock (CpuLoadUtils::class);
71+ $ cpuLoadUtilsMock ->method ('measure ' )
72+ ->willReturnOnConsecutiveCalls ($ result1Mock , $ result2Mock , $ result3Mock , $ result4Mock , $ result5Mock );
4373
44- /** @var CpuLoad $cpuLoadCheck */
45- $ cpuLoadCheck = $ objectManager ->get (CpuLoad::class);
46- $ checkResult = $ cpuLoadCheck ->run ();
74+ $ objectManager ->addSharedInstance ($ cpuLoadUtilsMock , CpuLoadUtils::class, true );
4775
48- $ this ->assertEquals ('cpu_load ' , $ checkResult ->getName ());
49- $ this ->assertEquals ($ expectedStatus , $ checkResult ->getStatus (), $ message );
50- }
76+ // Run each test case
77+ foreach ($ testCases as $ index => $ testCase ) {
78+ /** @var CpuLoad $cpuLoadCheck */
79+ $ cpuLoadCheck = $ objectManager ->create (CpuLoad::class);
80+ $ checkResult = $ cpuLoadCheck ->run ();
5181
52- public function cpuLoadDataProvider (): array
53- {
54- return [
55- [1 , 1 , 1 , CheckStatus::STATUS_OK , 'All loads are below 1: OK ' ],
56- [20 , 1 , 1 , CheckStatus::STATUS_WARNING , 'Load last minute is 20: warning ' ],
57- [1 , 20 , 1 , CheckStatus::STATUS_WARNING , 'Load last five minutes is 20: warning ' ],
58- [1 , 1 , 20 , CheckStatus::STATUS_WARNING , 'Load last fifteen minutes is 20: warning ' ],
59- [20 , 20 , 20 , CheckStatus::STATUS_WARNING , 'All loads are above 20: warning ' ],
60- ];
82+ $ this ->assertEquals ('cpu_load ' , $ checkResult ->getName (), "Test case {$ index }: {$ testCase ['message ' ]}" );
83+ $ this ->assertEquals ($ testCase ['expectedStatus ' ], $ checkResult ->getStatus (), "Test case {$ index }: {$ testCase ['message ' ]}" );
84+ }
6185 }
6286
6387 public function testCannotGetCpuLoad (): void
@@ -66,47 +90,19 @@ public function testCannotGetCpuLoad(): void
6690 $ objectManager = Bootstrap::getObjectManager ();
6791
6892 /** @var CpuLoadUtils & MockObject $cpuLoadUtilsMock */
69- $ cpuLoadUtilsMock = $ this ->getMockBuilder (CpuLoadUtils::class)
70- ->disableOriginalConstructor ()
71- ->onlyMethods (['measure ' ])
72- ->getMock ();
93+ $ cpuLoadUtilsMock = $ this ->createMock (CpuLoadUtils::class);
7394 $ cpuLoadUtilsMock ->method ('measure ' )
7495 ->willThrowException (new LocalizedException (__ ('Cannot get CPU load ' )));
7596
76- $ objectManager ->addSharedInstance ($ cpuLoadUtilsMock , CpuLoadUtils::class);
97+ $ objectManager ->addSharedInstance ($ cpuLoadUtilsMock , CpuLoadUtils::class, true );
7798
7899 /** @var CpuLoad $cpuLoadCheck */
79- $ cpuLoadCheck = $ objectManager ->get (CpuLoad::class);
100+ $ cpuLoadCheck = $ objectManager ->create (CpuLoad::class);
80101 $ checkResult = $ cpuLoadCheck ->run ();
81102
82103 $ this ->assertEquals ('cpu_load ' , $ checkResult ->getName ());
83104 $ this ->assertEquals ('Could not get CPU load ' , $ checkResult ->getShortSummary ());
84105 $ this ->assertEquals (CheckStatus::STATUS_CRASHED , $ checkResult ->getStatus ());
85106 }
86107
87- /**
88- * @return CpuLoadUtils&MockObject
89- */
90- private function getCpuLoadUtilsMock (
91- float $ loadLastMinute ,
92- float $ loadLastFiveMinutes ,
93- float $ loadLastFifteenMinutes
94- ): CpuLoadUtils &MockObject {
95- /** @var CpuLoadResults & MockObject $cpuLoadResultMock */
96- $ cpuLoadResultMock = $ this ->getMockBuilder (\Vendic \OhDear \Utils \CpuLoad \CpuLoadResults::class)
97- ->disableOriginalConstructor ()
98- ->onlyMethods (['getLoadLastMinute ' , 'getLoadLastFiveMinutes ' , 'getLoadLastFifteenMinutes ' ])
99- ->getMock ();
100- $ cpuLoadResultMock ->method ('getLoadLastMinute ' )->willReturn ($ loadLastMinute );
101- $ cpuLoadResultMock ->method ('getLoadLastFiveMinutes ' )->willReturn ($ loadLastFiveMinutes );
102- $ cpuLoadResultMock ->method ('getLoadLastFifteenMinutes ' )->willReturn ($ loadLastFifteenMinutes );
103-
104- /** @var CpuLoadUtils & MockObject $cpuLoadUtilsMock */
105- $ cpuLoadUtilsMock = $ this ->getMockBuilder (CpuLoadUtils::class)
106- ->disableOriginalConstructor ()
107- ->onlyMethods (['measure ' ])
108- ->getMock ();
109- $ cpuLoadUtilsMock ->method ('measure ' )->willReturn ($ cpuLoadResultMock );
110- return $ cpuLoadUtilsMock ;
111- }
112108}
0 commit comments