mktest 3.32 KB
Newer Older
1 2
#!/usr/bin/perl -w

Leigh Stoller's avatar
Leigh Stoller committed
3 4
#
# Copyright (c) 2000-2002 University of Utah and the Flux Group.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
# 
# {{{EMULAB-LICENSE
# 
# This file is part of the Emulab network testbed software.
# 
# This file is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or (at
# your option) any later version.
# 
# This file is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public
# License for more details.
# 
# You should have received a copy of the GNU Affero General Public License
# along with this file.  If not, see <http://www.gnu.org/licenses/>.
# 
# }}}
Leigh Stoller's avatar
Leigh Stoller committed
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 123 124 125 126 127 128 129
# 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;
    }
}

130
$dir = "tests/$name";
131 132 133 134 135 136
mkdir $dir,0755;
system "cp templates/$mode $dir/test";
open(INFO,"> $dir/info");
print INFO $description;
close(INFO);
system "cp $nsfile $dir/nsfile.ns";
137 138 139
open(TESTLIST,">> testlists/$mode");
print TESTLIST "$name\n";
close(TESTLIST);
140 141 142 143 144 145 146 147 148 149

print "Test generated.\n";

0;