From 986e458b34f3e753c02543c1e0aeffff5a925003 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Tue, 23 Dec 2014 20:00:46 -0500 Subject: [PATCH] CRM-13672 - Add unit test coverage for CRM_Utils_VersionCheck --- CRM/Utils/VersionCheck.php | 3 +- tests/phpunit/CRM/Utils/versionCheckTest.php | 176 +++++++++++++++++++ 2 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 tests/phpunit/CRM/Utils/versionCheckTest.php diff --git a/CRM/Utils/VersionCheck.php b/CRM/Utils/VersionCheck.php index e8cdf969a7..c63bad04f3 100644 --- a/CRM/Utils/VersionCheck.php +++ b/CRM/Utils/VersionCheck.php @@ -184,7 +184,8 @@ class CRM_Utils_VersionCheck { $localVersionDate = CRM_Utils_Array::value('date', $thisVersion, 0); foreach ($this->versionInfo as $majorVersion) { foreach ($majorVersion['releases'] as $release) { - if (!empty($release['security']) && $release['date'] > $localVersionDate) { + if (!empty($release['security']) && $release['date'] > $localVersionDate + && version_compare($this->localVersion, $release['version']) < 0) { if (!$this->ignoreDate || $this->ignoreDate < $release['date']) { return TRUE; } diff --git a/tests/phpunit/CRM/Utils/versionCheckTest.php b/tests/phpunit/CRM/Utils/versionCheckTest.php new file mode 100644 index 0000000000..1153fc422e --- /dev/null +++ b/tests/phpunit/CRM/Utils/versionCheckTest.php @@ -0,0 +1,176 @@ + 'VersionCheck Test', + 'description' => 'Test versionCheck functionality', + 'group' => 'CiviCRM BAO Tests', + ); + } + + function setUp() { + parent::setUp(); + } + + /** + * @var array + */ + protected $sampleVersionInfo = array( + '4.2' => array( + 'status' => 'eol', + 'releases' => array( + array('version' => '4.2.0', 'date' => '2012-08-20'), + array('version' => '4.2.1', 'date' => '2012-09-12'), + array('version' => '4.2.2', 'date' => '2012-09-27'), + array('version' => '4.2.4', 'date' => '2012-10-18'), + array('version' => '4.2.6', 'date' => '2012-11-01', 'security' => true), + array('version' => '4.2.7', 'date' => '2013-01-02', 'security' => true), + array('version' => '4.2.8', 'date' => '2013-02-20'), + array('version' => '4.2.9', 'date' => '2013-04-03'), + array('version' => '4.2.10', 'date' => '2013-07-29', 'security' => true), + array('version' => '4.2.11', 'date' => '2013-09-25'), + array('version' => '4.2.12', 'date' => '2013-10-02', 'security' => true), + array('version' => '4.2.13', 'date' => '2013-11-06', 'security' => true), + array('version' => '4.2.14', 'date' => '2013-11-20'), + array('version' => '4.2.15', 'date' => '2014-02-07', 'security' => true), + array('version' => '4.2.16', 'date' => '2014-02-18'), + array('version' => '4.2.17', 'date' => '2014-07-01', 'security' => true), + array('version' => '4.2.18', 'date' => '2014-08-06'), + array('version' => '4.2.19', 'date' => '2014-09-17', 'security' => true) + ), + ), + '4.3' => array( + 'status' => 'lts', + 'releases' => array( + array('version' => '4.3.0', 'date' => '2013-04-10'), + array('version' => '4.3.1', 'date' => '2013-04-18'), + array('version' => '4.3.2', 'date' => '2013-05-02'), + array('version' => '4.3.3', 'date' => '2013-05-08'), + array('version' => '4.3.4', 'date' => '2013-06-10', 'security' => true), + array('version' => '4.3.5', 'date' => '2013-07-08', 'security' => true), + array('version' => '4.3.6', 'date' => '2013-09-25'), + array('version' => '4.3.7', 'date' => '2013-10-02', 'security' => true), + array('version' => '4.3.8', 'date' => '2013-11-06', 'security' => true), + array('version' => '4.3.9', 'date' => '2014-09-07', 'security' => true) + ), + ), + '4.4' => array( + 'status' => 'lts', + 'releases' => array( + array('version' => '4.4.0', 'date' => '2013-10-23'), + array('version' => '4.4.1', 'date' => '2013-11-06', 'security' => true), + array('version' => '4.4.2', 'date' => '2013-11-20'), + array('version' => '4.4.3', 'date' => '2013-12-05'), + array('version' => '4.4.4', 'date' => '2014-02-07', 'security' => true), + array('version' => '4.4.5', 'date' => '2014-04-17'), + array('version' => '4.4.6', 'date' => '2014-07-01', 'security' => true), + array('version' => '4.4.7', 'date' => '2014-09-17', 'security' => true), + array('version' => '4.4.8', 'date' => '2014-10-14'), + array('version' => '4.4.9', 'date' => '2014-11-05'), + array('version' => '4.4.10', 'date' => '2014-11-19'), + array('version' => '4.4.11', 'date' => '2014-12-17', 'security' => true) + ), + ), + '4.5' => array( + 'status' => 'stable', + 'releases' => array( + array('version' => '4.5.0', 'date' => '2014-09-18'), + array('version' => '4.5.1', 'date' => '2014-10-09'), + array('version' => '4.5.2', 'date' => '2014-10-14'), + array('version' => '4.5.3', 'date' => '2014-11-05'), + array('version' => '4.5.4', 'date' => '2014-11-19'), + array('version' => '4.5.5', 'date' => '2014-12-17', 'security' => true), + ) + ), + '4.6' => array( + 'status' => 'testing', + 'releases' => array( + array('version' => '4.6.alpha1', 'date' => '2015-02-01'), + array('version' => '4.6.beta1', 'date' => '2015-03-01'), + ) + ), + ); + + /** + * @dataProvider newerVersionDataProvider + * @param string $localVersion + * @param array $versionInfo + * @param mixed $expectedResult + */ + function testNewerVersion($localVersion, $versionInfo, $expectedResult) { + $vc = CRM_Utils_VersionCheck::singleton(); + // These values are set by the constructor but for testing we override them + $vc->localVersion = $localVersion; + $vc->localMajorVersion = $vc->getMajorVersion($localVersion); + $vc->versionInfo = $versionInfo; + $this->assertEquals($vc->isNewerVersionAvailable(), $expectedResult); + } + + /** + * @return array (localVersion, versionInfo, expectedResult) + */ + function newerVersionDataProvider() { + $data = array(); + + // Make sure we do not get unstable release updates for a stable localVersion + $data[] = array('4.5.5', $this->sampleVersionInfo, NULL); + + // Make sure we do get unstable release updates for unstable localVersion + $data[] = array('4.6.alpha1', $this->sampleVersionInfo, '4.6.beta1'); + + // Make sure we get nothing (and no errors) if no versionInfo available + $data[] = array('4.7.beta1', array(), NULL); + + // Make sure alerts prioritize the localMajorVersion + $data[] = array('4.4.1', $this->sampleVersionInfo, '4.4.11'); + + return $data; + } + + /** + * @dataProvider securityUpdateDataProvider + * @param string $localVersion + * @param array $versionInfo + * @param bool $expectedResult + */ + function testSecurityUpdate($localVersion, $versionInfo, $expectedResult) { + $vc = CRM_Utils_VersionCheck::singleton(); + // These values are set by the constructor but for testing we override them + $vc->localVersion = $localVersion; + $vc->localMajorVersion = $vc->getMajorVersion($localVersion); + $vc->versionInfo = $versionInfo; + $this->assertEquals($vc->isSecurityUpdateAvailable(), $expectedResult); + } + + /** + * @return array (localVersion, versionInfo, expectedResult) + */ + function securityUpdateDataProvider() { + $data = array(); + + // Make sure we get alerted if a security release is available + $data[] = array('4.5.1', $this->sampleVersionInfo, TRUE); + + // Make sure we do not get alerted if a security release is not available + $data[] = array('4.5.5', $this->sampleVersionInfo, FALSE); + + // Make sure we get false (and no errors) if no versionInfo available (this will be the case for pre-alphas) + $data[] = array('4.7.alpha1', array(), FALSE); + + // If there are 2 security updates on the same day (e.g. lts and stable majorVersions) + // we should not get alerted to one if we are using the other + $data[] = array('4.4.11', $this->sampleVersionInfo, FALSE); + + // This version predates the ones in the info array, it should be assumed to be EOL and insecure + $data[] = array('4.0.1', $this->sampleVersionInfo, TRUE); + + return $data; + } +} -- 2.25.1