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;