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.63 KB
Newer Older
1 2
#!/usr/bin/perl -w

Leigh B. Stoller's avatar
Leigh B. Stoller committed
3 4 5 6 7 8 9
#
# EMULAB-COPYRIGHT
# Copyright (c) 2000-2002 University of Utah and the Flux Group.
# All rights reserved.
#


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
# 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;
    }
}

113
$dir = "tests/$name";
114 115 116 117 118 119
mkdir $dir,0755;
system "cp templates/$mode $dir/test";
open(INFO,"> $dir/info");
print INFO $description;
close(INFO);
system "cp $nsfile $dir/nsfile.ns";
120 121 122
open(TESTLIST,">> testlists/$mode");
print TESTLIST "$name\n";
close(TESTLIST);
123 124 125 126 127 128 129 130 131 132

print "Test generated.\n";

0;