Skip to content

Commit

Permalink
Add storage realm tests (#880)
Browse files Browse the repository at this point in the history
Add storage resources during automated tests for setup and upgrade.
Ingest storage data during automated tests.  Add regression tests and
refactor the other usage explorer CSV regression tests.  Update output
data for related integration tests.  Fix bug in CSV exports that caused
an error when exporting an empty data set.  Add ordering to realm
queries to ensure consistent ordering of realms in the usage explorer.
  • Loading branch information
jtpalmer authored Mar 29, 2019
1 parent 84a81bf commit 1eb9bb4
Show file tree
Hide file tree
Showing 853 changed files with 92,285 additions and 934 deletions.
108 changes: 52 additions & 56 deletions classes/DataWarehouse/Data/SimpleDataset.php
Original file line number Diff line number Diff line change
Expand Up @@ -332,72 +332,68 @@ public function export($export_title = 'title')
$title = array('title' => 'None');
$title2 = array('parameters' => array());

$results = $this->getResults();
$result_count = count($results);
$title['title'] = $export_title;
$title2['parameters'] = $this->_query->roleParameterDescriptions;
$group_bys = $this->_query->getGroupBys();

$stats = $this->_query->getStats();
$has_stats = count($stats) > 0;

foreach ($group_bys as $group_by) {
$headers[]
= $group_by->getName() === 'none'
? 'Summary'
: $group_by->getLabel();
}

if ($result_count > 0) {
$title['title'] = $export_title;
$title2['parameters'] = $this->_query->roleParameterDescriptions;
$group_bys = $this->_query->getGroupBys();
foreach ($stats as $stat) {
$stat_unit = $stat->getUnit();
$stat_alias = $stat->getAlias()->getName();

$stats = $this->_query->getStats();
$has_stats = count($stats) > 0;

foreach ($group_bys as $group_by) {
$headers[]
= $group_by->getName() === 'none'
? 'Summary'
: $group_by->getLabel();
$data_unit = '';
if (substr( $stat_unit, -1 ) == '%') {
$data_unit = '%';
}

foreach ($stats as $stat) {
$stat_unit = $stat->getUnit();
$stat_alias = $stat->getAlias()->getName();
$column_header = $stat->getLabel();

$data_unit = '';
if (substr( $stat_unit, -1 ) == '%') {
$data_unit = '%';
}

$column_header = $stat->getLabel();

if (
$column_header != $stat_unit
&& strpos($column_header, $stat_unit) === false
) {
$column_header .= ' (' . $stat_unit . ')';
}
if (
$column_header != $stat_unit
&& strpos($column_header, $stat_unit) === false
) {
$column_header .= ' (' . $stat_unit . ')';
}

$headers[]
= $column_header
. (
count($this->_query->filterParameterDescriptions) > 0
? ' {'
. implode(
', ',
$this->_query->filterParameterDescriptions
)
. '}'
: ''
);
} // foreach ($stats as $stat)
$headers[]
= $column_header
. (
count($this->_query->filterParameterDescriptions) > 0
? ' {'
. implode(
', ',
$this->_query->filterParameterDescriptions
)
. '}'
: ''
);
} // foreach ($stats as $stat)

foreach ($results as $result) {
$record = array();
foreach ($group_bys as $group_by) {
$record[$group_by->getName()]
= $result[$group_by->getLongNameColumnName(true)];
}

$stats = $this->_query->getStats();
foreach ($stats as $stat) {
$record[$stat->getAlias()->getName()]
= $result[$stat->getAlias()->getName()];
}
foreach ($this->getResults() as $result) {
$record = array();
foreach ($group_bys as $group_by) {
$record[$group_by->getName()]
= $result[$group_by->getLongNameColumnName(true)];
}

$rows[] = $record;
$stats = $this->_query->getStats();
foreach ($stats as $stat) {
$record[$stat->getAlias()->getName()]
= $result[$stat->getAlias()->getName()];
}
} // foreach ($results as $result)

$rows[] = $record;
} // foreach ($this->getResults() as $result)

return array(
'title' => $title,
Expand Down
5 changes: 3 additions & 2 deletions classes/Models/Services/Realms.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ public static function getRealms()
{
$db = DB::factory('database');

$results = $db->query("SELECT r.* FROM realms r");
$results = $db->query("SELECT r.* FROM realms r ORDER BY r.realm_id");
return array_reduce($results, function ($carry, $item) {
$carry[] = new Realm($item);
return $carry;
Expand All @@ -34,7 +34,8 @@ public static function getRealmsForUser(\XDUser $user)
FROM acl_group_bys agb
JOIN user_acls ua ON agb.acl_id = ua.acl_id
JOIN realms r ON r.realm_id = agb.realm_id
WHERE ua.user_id = :user_id;
WHERE ua.user_id = :user_id
ORDER BY r.realm_id
SQL;
$params = array(
':user_id'=> $user->getUserID()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,7 @@ public function testGetMenus(array $user)
$this->getTestFiles()->getFile('user_admin', $output)
);

$this->assertEquals($expected, $actual, "[$username] Get Menus - Expected:\n\n[" . json_encode($expected) . "]\n\nReceived:\n\n[" . json_encode($actual) . "]");
$this->assertEquals($expected, $actual, "[$username] Get Menus - Expected:\n\n" . json_encode($expected) . "\n\nReceived:\n\n" . json_encode($actual));

if ($username !== self::PUBLIC_USER_NAME) {
$this->helper->logout();
Expand Down Expand Up @@ -432,7 +432,7 @@ public function testGetDwDescripters(array $user)
$this->getTestFiles()->getFile('user_admin', $expectedFileName, 'output')
);

$this->assertEquals($expected, $actual);
$this->assertEquals($expected, $actual, "[$username] Get Data Warehouse Descripters - Expected:\n\n" . json_encode($expected) . "\n\nReceived:\n\n" . json_encode($actual));

if (!$isPublicUser) {
$this->helper->logout();
Expand Down
15 changes: 15 additions & 0 deletions open_xdmod/modules/xdmod/integration_tests/scripts/bootstrap.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ then
done
sudo -u xdmod xdmod-shredder -r openstack -d $REF_DIR/openstack -f openstack
sudo -u xdmod xdmod-ingestor
for storage_dir in $REF_DIR/storage/*; do
sudo -u xdmod xdmod-shredder -f storage -r $(basename $storage_dir) -d $storage_dir
done
sudo -u xdmod xdmod-ingestor --ingest --datatype storage
sudo -u xdmod xdmod-ingestor --aggregate=storage
sudo -u xdmod xdmod-import-csv -t names -i $REF_DIR/names.csv
sudo -u xdmod xdmod-ingestor
php /root/bin/createusers.php
Expand All @@ -44,6 +49,16 @@ then
yum -y install ~/rpmbuild/RPMS/*/*.rpm
~/bin/services start
expect $BASEDIR/xdmod-upgrade.tcl | col -b

# Add storage resources and data. These resources and data should be added
# to the 8.1 Docker image and this script should then be removed.
expect $BASEDIR/xdmod-upgrade-add-storage-resources.tcl | col -b
for storage_dir in $REF_DIR/storage/*; do
sudo -u xdmod xdmod-shredder -f storage -r $(basename $storage_dir) -d $storage_dir
done
sudo -u xdmod xdmod-ingestor --ingest --datatype storage
sudo -u xdmod xdmod-ingestor --aggregate=storage

sudo -u xdmod xdmod-shredder -r openstack -d $REF_DIR/openstack -f openstack
sudo -u xdmod xdmod-ingestor
fi
26 changes: 11 additions & 15 deletions open_xdmod/modules/xdmod/integration_tests/scripts/xdmod-setup.tcl
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,14 @@
#-------------------------------------------------------------------------------
# Configuration settings for the XDMoD resources
set resources [list]
lappend resources [list frearson Frearson 400 4000]
lappend resources [list mortorq Mortorq 400 4000]
lappend resources [list phillips Phillips 400 4000]
lappend resources [list pozidriv Posidriv 400 4000]
lappend resources [list robertson Robertson 400 4000]
lappend resources [list frearson Frearson hpc 400 4000]
lappend resources [list mortorq Mortorq hpc 400 4000]
lappend resources [list phillips Phillips hpc 400 4000]
lappend resources [list pozidriv Posidriv hpc 400 4000]
lappend resources [list robertson Robertson hpc 400 4000]
lappend resources [list openstack OpenStack cloud 123 234]
lappend resources [list recex Recex tape 0 0]
lappend resources [list torx Torx stgrid 0 0]

# Load helper functions from helper-functions.tcl
source [file join [file dirname [info script]] helper-functions.tcl]
Expand Down Expand Up @@ -55,18 +58,11 @@ foreach resource $resources {
selectMenuOption 1
provideInput {Resource Name:} [lindex $resource 0]
provideInput {Formal Name:} [lindex $resource 1]
provideInput {Resource Type*} {}
provideInput {How many nodes does this resource have?} [lindex $resource 2]
provideInput {How many total processors (cpu cores) does this resource have?} [lindex $resource 3]
provideInput {Resource Type*} [lindex $resource 2]
provideInput {How many nodes does this resource have?} [lindex $resource 3]
provideInput {How many total processors (cpu cores) does this resource have?} [lindex $resource 4]
}

selectMenuOption 1
provideInput {Resource Name:} openstack
provideInput {Formal Name:} OpenStack
provideInput {Resource Type*} cloud
provideInput {How many nodes does this resource have?} 123
provideInput {How many total processors (cpu cores) does this resource have?} 234

selectMenuOption s
confirmFileWrite yes
enterToContinue
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env expect
# Expect script that runs xdmod-setup to add storage resources to an already
# installed Open XDMoD instance.

#-------------------------------------------------------------------------------
# Configuration settings for the XDMoD resources
set resources [list]
lappend resources [list recex Recex tape 0 0]
lappend resources [list torx Torx stgrid 0 0]

# Load helper functions from helper-functions.tcl
source [file join [file dirname [info script]] helper-functions.tcl]

#-------------------------------------------------------------------------------
# main body

set timeout 240
spawn "xdmod-setup"

selectMenuOption 4
foreach resource $resources {
selectMenuOption 1
provideInput {Resource Name:} [lindex $resource 0]
provideInput {Formal Name:} [lindex $resource 1]
provideInput {Resource Type*} [lindex $resource 2]
provideInput {How many nodes does this resource have?} [lindex $resource 3]
provideInput {How many total processors (cpu cores) does this resource have?} [lindex $resource 4]
}

selectMenuOption s
confirmFileWrite yes
enterToContinue
confirmFileWrite yes
enterToContinue
selectMenuOption q

lassign [wait] pid spawnid os_error_flag value
exit $value
Original file line number Diff line number Diff line change
@@ -1,14 +1,55 @@
<?php
/**
* @package OpenXdmod
* @subpackage Tests
*/

namespace Controllers;

class UsageExplorerCloudTest extends UsageExplorerTest
use TestHarness\RegressionTestHelper;

/**
* Test the usage explorer for cloud realm regressions.
*/
class UsageExplorerCloudTest extends \PHPUnit_Framework_TestCase
{

public function csvExportProvider(){
parent::$baseDir = __DIR__ . '/../../../tests/artifacts/xdmod-test-artifacts/xdmod/regression/current/';
parent::defaultSetup();
/**
* @var \RegressionTestHelper
*/
private static $helper;

/**
* Create the helper and authenticate.
*/
public static function setUpBeforeClass()
{
self::$helper = new RegressionTestHelper();
self::$helper->authenticate();
}

/**
* Log out and output any messages generated by tests.
*/
public static function tearDownAfterClass()
{
self::$helper->logout();
self::$helper->outputMessages();
}

/**
* Test usage explorer CSV export.
*
* @group regression
* @group UsageExplorer
* @dataProvider csvExportProvider
*/
public function testCsvExport($testName, $input, $expectedFile, $userRole)
{
$this->assertTrue(self::$helper->checkCsvExport($testName, $input, $expectedFile, $userRole));
}

public function csvExportProvider(){
$statistics = array(
'cloud_num_sessions_ended',
'cloud_num_sessions_running',
Expand Down Expand Up @@ -38,9 +79,9 @@ public function csvExportProvider(){
'dataset_type' => array('aggregate', 'timeseries'),
'statistic' => $statistics,
'group_by' => $group_bys,
'aggregation_unit' => array_keys($this->aggregationUnits)
'aggregation_unit' => array('Day', 'Month', 'Quarter', 'Year')
);

return parent::generateTests($varSettings, '2018-04-18', '2018-04-30');
return RegressionTestHelper::generateTests($varSettings, '2018-04-18', '2018-04-30');
}
}
Loading

0 comments on commit 1eb9bb4

Please sign in to comment.