All new accounts created on Gitlab now require administrator approval. If you invite any collaborators, please let Flux staff know so they can approve the accounts.

mktest 2.45 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
#!/usr/bin/perl -w

# TODO: Add support for varying number of available nodes.
# TODO: Add support for Full tests.

# mktest

# This is a tool to facilitate test construction.  It interactively prompts
# the user for test information and constructs the necessary test files.
# The pass/fail of the test is based solely on the exit codes of the
# various tb* programs.  This tool will not suffice for more intricate
# checking.

# This script must be run in the testsuite directory.

if (! -d "templates") {
    print STDERR "Must be run in testbed/testsuite.\n";
    exit(1);
}

if (! defined($ENV{"EDITOR"})) {
    $editor = "vi";
} else {
    $editor = $ENV{"EDITOR"};
}


$name = "";
$mode = "";
$description = "";
$nsfile = "";

# Optional syntax:
#  mktest <mode> <name> <nsfile> [<description>]
if ($#ARGV != -1) {
    ($mode,$name,$nsfile) = @ARGV[0..2];
    if ($#ARGV == 3) {
	$description = $ARGV[3];
    } 
}

while ($name eq "") {
    print "Test Name:\n";
    print "\n";
    print "> ";
    $in = <STDIN>;
    chop $in;
    if ($in =~ /\s/) {
	print "Please, no whitespace.\n";
    } else {
	$name = $in;
    }
}


while ($mode eq "") {
    print "\nMode:\n";
    print "\n";
    print "Frontend - This is a frontend test only.  It does not require actual\n";
    print "hardware and will not test beyond assign wrapper.\n";
    print "\n";
    print "Full - This is a full test.  This is not yet supported.\n";
    print "\n";
    print "1) Frontend\n";
    print "2) Full\n";
    print "> ";
    $in = <STDIN>;
    chop $in;
    if ($in =~ /1/) {
	$mode = "frontend";
    } elsif ($in =~ /2/) {
	$mode = "full";
    }
}


if ($description eq "") {
    $tmpfile = "/tmp/$$";
    open(TMPFILE,"> $tmpfile") || die "Could not open $tmpfile for writing.\n";
    print TMPFILE "# Enter a description of your test here.";
    close TMPFILE;
    system("$editor $tmpfile");
    open(TMPFILE,"$tmpfile") || die "Could not open $tmpfile for reading.\n";
    while (<TMPFILE>) {
	if (! /^\#/) {
	    $description .= $_;
	}
    }
    close(TMPFILE);
    unlink $tmpfile;
}

while ($nsfile eq "") {
    print "\nNS File.\n";
    print "\n";
    print "> ";
    $in = <STDIN>;
    chop $in;
    if (! -f $in) {
	print "$in does not exist.\n";
    } else {
	$nsfile = $in;
    }
}

$dir = "tests/$mode/$name";
mkdir $dir,0755;
system "cp templates/$mode $dir/test";
open(INFO,"> $dir/info");
print INFO $description;
close(INFO);
system "cp $nsfile $dir/nsfile.ns";

print "Test generated.\n";

0;