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.52 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
#!/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;
    }
}

106
$dir = "tests/$name";
107 108 109 110 111 112
mkdir $dir,0755;
system "cp templates/$mode $dir/test";
open(INFO,"> $dir/info");
print INFO $description;
close(INFO);
system "cp $nsfile $dir/nsfile.ns";
113 114 115
open(TESTLIST,">> testlists/$mode");
print TESTLIST "$name\n";
close(TESTLIST);
116 117 118 119 120 121 122 123 124 125

print "Test generated.\n";

0;