mirror of
https://github.com/Telecominfraproject/wlan-lanforge-scripts.git
synced 2025-10-30 18:27:53 +00:00
Utils: Add option to doCmd to allow waiting for arbitrary text, that way we can ignore intervening 'RSLT' lines when doing batched cmds.
207 lines
4.7 KiB
Perl
Executable File
207 lines
4.7 KiB
Perl
Executable File
#!/usr/bin/perl -w
|
|
|
|
# This program is used to load GUI tests (TR-398, Capacity, etc) from a file
|
|
# and configure it in the LANforge server. See gui/README.txt
|
|
# (C) 2020 Candela Technologies Inc.
|
|
#
|
|
#
|
|
|
|
use strict;
|
|
use warnings;
|
|
use diagnostics;
|
|
use Carp;
|
|
$SIG{ __DIE__ } = sub { Carp::confess( @_ ) };
|
|
$SIG{ __WARN__ } = sub { Carp::confess( @_ ) };
|
|
|
|
# Un-buffer output
|
|
$| = 1;
|
|
|
|
# use lib prepends to @INC, so put lower priority first
|
|
# This is before run-time, so cannot condition this with normal 'if' logic.
|
|
use lib '/home/lanforge/scripts';
|
|
use lib "../";
|
|
use lib "./";
|
|
|
|
use LANforge::Endpoint;
|
|
use LANforge::Port;
|
|
use LANforge::Utils;
|
|
use Net::Telnet ();
|
|
use Getopt::Long;
|
|
|
|
our $NA = 'NA';
|
|
our $NL = "\n";
|
|
|
|
# Default values for ye ole cmd-line args.
|
|
our $quiet = "yes";
|
|
our $test_type = "Plugin-Settings";
|
|
our $test_name = "";
|
|
our $file_name = "";
|
|
our $action = "show";
|
|
our $lfmgr_host = "localhost";
|
|
our $lfmgr_port = 4001;
|
|
|
|
########################################################################
|
|
# Nothing to configure below here, most likely.
|
|
########################################################################
|
|
|
|
our $usage = <<"__EndOfUsage__";
|
|
$0 [ --action {
|
|
show | set
|
|
} ]
|
|
[--file {data file name}]
|
|
[--test_name {test name or ALL}]
|
|
[--test_type {Plugin-Settings or other type or ALL}]
|
|
[--mgr {host-name | IP}]
|
|
[--mgr_port {ip port}]
|
|
[--quiet { yes | no }]
|
|
[--log_cli {1|filename}]
|
|
|
|
Example:
|
|
$0 --action set --test_name AP-Auto-ap-auto-32-64-dual --file test_configs/AP-Auto-ap-auto-32-64-dual.txt
|
|
__EndOfUsage__
|
|
|
|
my $i = 0;
|
|
my $cmd;
|
|
|
|
my $log_cli = "unset"; # use ENV{LOG_CLI} elsewhere
|
|
my $show_help = 0;
|
|
|
|
if (@ARGV < 2) {
|
|
print $usage;
|
|
exit 0;
|
|
}
|
|
|
|
our $debug = 0;
|
|
|
|
GetOptions
|
|
(
|
|
'action|a=s' => \$::action,
|
|
'file=s' => \$::file_name,
|
|
'test_name=s' => \$::test_name,
|
|
'test_type=s' => \$::test_type,
|
|
'debug|d' => \$::debug,
|
|
'help|h' => \$show_help,
|
|
'log_cli=s{0,1}' => \$log_cli,
|
|
'manager|mgr|m=s' => \$::lfmgr_host,
|
|
'lfmgr_port|mgr_port|port|p=i' => \$::lfmgr_port,
|
|
'quiet|q=s' => \$::quiet,
|
|
|
|
) || die("$::usage");
|
|
|
|
if ($show_help) {
|
|
print $usage;
|
|
exit 0;
|
|
}
|
|
|
|
use Data::Dumper;
|
|
|
|
if ($::debug) {
|
|
$ENV{DEBUG} = 1 if (!(defined $ENV{DEBUG}));
|
|
}
|
|
|
|
if ($::quiet eq "0") {
|
|
$::quiet = "no";
|
|
}
|
|
elsif ($::quiet eq "1") {
|
|
$::quiet = "yes";
|
|
}
|
|
|
|
if (defined $log_cli) {
|
|
if ($log_cli ne "unset") {
|
|
# here is how we reset the variable if it was used as a flag
|
|
if ($log_cli eq "") {
|
|
$ENV{'LOG_CLI'} = 1;
|
|
}
|
|
else {
|
|
$ENV{'LOG_CLI'} = $log_cli;
|
|
}
|
|
}
|
|
}
|
|
|
|
our @valid_actions = qw(show set);
|
|
|
|
if (! (grep {$_ eq $::action} @::valid_actions )) {
|
|
die("Invalid action: $::action\n$::usage\n");
|
|
}
|
|
if ($::quiet eq "1" ) {
|
|
$::quiet = "yes";
|
|
}
|
|
|
|
# Open connection to the LANforge server.
|
|
our $utils = new LANforge::Utils();
|
|
$::utils->connect($lfmgr_host, $lfmgr_port);
|
|
|
|
|
|
if ($::action eq "show") {
|
|
$cmd = "show_text_blob $test_type $test_name";
|
|
my $txt = $::utils->doCmd($cmd);
|
|
my @r = split(/\n/, $txt);
|
|
my $first = $r[0];
|
|
chomp($first);
|
|
if ($first =~ /.*::(.*)/) {
|
|
print "$1\n";
|
|
}
|
|
my $i;
|
|
for ($i = 1; $i<@r; $i++) {
|
|
my $ln = $r[$i];
|
|
chomp($ln);
|
|
if ($ln =~ /\s*>>RSLT.*/) {
|
|
# ignore
|
|
}
|
|
elsif ($ln =~ /\s*default\@btbits.*/) {
|
|
# ignore
|
|
}
|
|
else {
|
|
print "$ln\n";
|
|
}
|
|
}
|
|
}
|
|
elsif ($::action eq "set") {
|
|
if ($file_name eq "") {
|
|
print("ERROR: Must specify file name when doing the 'set' action\n");
|
|
exit(1);
|
|
}
|
|
|
|
my @cmds = `cat $file_name`;
|
|
if (@cmds == 0) {
|
|
print("ERROR: Could not read any lines from the file: $file_name\n");
|
|
exit(2);
|
|
}
|
|
|
|
# First clean out any old text blob.
|
|
$cmd = "rm_text_blob $test_type $test_name";
|
|
$::utils->doCmd($cmd);
|
|
|
|
# And add the new blob
|
|
for ($i = 0; $i<@cmds; $i++) {
|
|
my $ln = $cmds[$i];
|
|
chomp($ln);
|
|
|
|
# Skip blank lines
|
|
if ($ln eq "") {
|
|
next;
|
|
}
|
|
|
|
$cmd = "add_text_blob '$test_type' '$test_name' $ln";
|
|
print("$cmd\n");
|
|
if ($i % 25 == 0) {
|
|
$::utils->doCmd($cmd, 1); # send and do not wait for result
|
|
}
|
|
else {
|
|
$::utils->doCmd($cmd); # send and wait for result
|
|
}
|
|
}
|
|
|
|
# Wait until we complete processing of all cmds.
|
|
$cmd = "gossip __gossip_test__";
|
|
$::utils->doCmd($cmd, 0, "/__gossip_test__/");
|
|
}
|
|
else {
|
|
die("Unknown action: $::action\n$::usage\n");
|
|
}
|
|
|
|
exit(0);
|
|
|
|
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|
|
# ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
|