Passed
Push — master ( f12127...314db7 )
by Tim
01:39
created

ModuleSet::setTestCase()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 4
rs 10
1
<?php
2
3
namespace SimpleSAML\Module\monitor\TestSuite\Modules;
4
5
use \SimpleSAML\Module\monitor\State as State;
6
use \SimpleSAML\Module\monitor\TestCase as TestCase;
7
use \SimpleSAML\Module\monitor\TestData as TestData;
8
use \SimpleSAML\Module\monitor\TestResult as TestResult;
9
10
final class ModuleSet extends \SimpleSAML\Module\monitor\TestSuiteFactory
11
{
12
    /**
13
     * @var array
14
     */
15
    private $required;
16
17
    /**
18
     * @var array
19
     */
20
    private $available;
21
 
22
    /**
23
     * @var array
24
     */
25
    private $dependencies;
26
27
    /**
28
     * @var string
29
     */
30
    private $type;
31
32
    /**
33
     * @param TestData $testData
34
     *
35
     * @return void
36
     */
37
    protected function initialize($testData)
38
    {
39
        $this->setRequired($testData->getInputItem('required'));
40
        $this->setAvailable($testData->getInputItem('available'));
41
        $this->setDependencies($testData->getInputItem('dependencies'));
42
        $this->setType($testData->getInputItem('type'));
43
        $this->setCategory($this->type.' modules');
44
    }
45
46
    /**
47
     * @param array
48
     */
49
    private function setRequired($required)
50
    {
51
        assert(is_array($required));
52
        $this->required = $required;
53
    }
54
55
56
    /**
57
     * @param array
58
     */
59
    private function setAvailable($available)
60
    {
61
        assert(is_array($available));
62
        $this->available = $available;
63
    }
64
65
66
    /**
67
     * @param array
68
     */
69
    private function setDependencies($dependencies)
70
    {
71
        assert(is_array($dependencies));
72
        $this->dependencies = $dependencies;
73
    }
74
75
76
    /**
77
     * @param string
78
     */
79
    private function setType($type)
80
    {
81
        assert(is_string($type));
82
        $this->type = $type;
83
    }
84
85
86
    /**
87
     * @return void
88
     */
89
    public function invokeTest()
90
    {
91
        if (empty($this->available)) {
92
            $state = State::SKIPPED;
93
        } else {
94
            foreach ($this->required as $module) {
95
                $testData = new TestData([
96
                    'required' => $module,
97
                    'available' => $this->available,
98
                    'type' => $this->type,
99
                ]);
100
101
                $moduleTest = new TestCase\Module($testData);
102
                $moduleTestResult = $moduleTest->getTestResult();
103
                if ($moduleTestResult->getState() !== State::OK) {
104
                    $missing = $this->findMissingDependencies($module);
105
                    if (!empty($missing)) {
106
                        $moduleTestResult->setSubject($moduleTest->getModuleName());
107
                        $moduleTestResult->setMessage('Module not loaded; dependency for ' . implode(', ', $missing));
108
                    }
109
                }
110
                $this->addTestResult($moduleTestResult);
111
            }
112
            $state = $this->calculateState();
113
        }
114
115
        $testResult = new TestResult($this->type, implode(', ', $this->required));       
116
        if ($state === State::OK) {
117
            $testResult->setMessage('All required modules are loaded');
118
        } elseif ($state === State::SKIPPED) {
119
            $testResult->setMessage('Unable to verify installed modules');
120
        } else {
121
            $testResult->setMessage('Not all required modules are loaded');
122
        }
123
        $testResult->setState($state);
124
        $this->setTestResult($testResult);
125
    }
126
127
    /**
128
     * @param string $module
129
     * @return array
130
     */
131
    private function findMissingDependencies($module)
132
    {
133
        $dependencies = $this->dependencies;
134
        $missing = array();
135
        while ($dependency = array_search($module, $dependencies)) {
136
            if (\SimpleSAML\Module::isModuleEnabled($dependency)) {
137
                $missing[] = $dependency;
138
            }
139
            unset($dependencies[$dependency]);
140
        }
141
        return $missing;
142
    }
143
}
144