mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-18 19:21:26 +00:00
Merge branch 'svn-trunk'
This commit is contained in:
@@ -2621,9 +2621,12 @@ sub deviceAttributes {
|
||||
my $group = $3;
|
||||
my $lun = $4;
|
||||
|
||||
next if ($target eq 'copy_manager');
|
||||
$attributes{$attribute}->{'value'}->{$driver}->{$target}->{$group} = $lun;
|
||||
}
|
||||
|
||||
}
|
||||
if ($attributes{$attribute}->{'value'}) {
|
||||
$attributes{$attribute}->{'static'} = TRUE;
|
||||
}
|
||||
close $eHandle;
|
||||
|
||||
@@ -12,7 +12,7 @@ my $redirect_file;
|
||||
my $redirect;
|
||||
|
||||
BEGIN {
|
||||
$redirect_file = "/tmp/07-output.txt";
|
||||
$redirect_file = "/tmp/scstadmin-test-07-output.txt";
|
||||
unlink($redirect_file);
|
||||
$testdir = dirname(abs_path($0));
|
||||
my $scstadmin_pm_dir = dirname($testdir);
|
||||
|
||||
125
scstadmin/scstadmin.sysfs/scst-1.0.0/t/08-scstadmin-close-dev.t
Normal file
125
scstadmin/scstadmin.sysfs/scst-1.0.0/t/08-scstadmin-close-dev.t
Normal file
@@ -0,0 +1,125 @@
|
||||
#!perl
|
||||
|
||||
use strict;
|
||||
use Cwd qw(abs_path);
|
||||
use File::Basename;
|
||||
use File::Spec;
|
||||
use Test;
|
||||
|
||||
my $testdir;
|
||||
my $scstadmin;
|
||||
my $redirect_file;
|
||||
my $redirect;
|
||||
|
||||
BEGIN {
|
||||
$redirect_file = "/tmp/scstadmin-test-08-output.txt";
|
||||
unlink($redirect_file);
|
||||
$testdir = dirname(abs_path($0));
|
||||
my $scstadmin_pm_dir = dirname($testdir);
|
||||
my $scstadmin_dir = dirname($scstadmin_pm_dir);
|
||||
$scstadmin = File::Spec->catfile($scstadmin_dir, "scstadmin");
|
||||
unless(grep /blib/, @INC) {
|
||||
unshift(@INC, File::Spec->catdir($scstadmin_pm_dir, "lib"));
|
||||
}
|
||||
plan tests => 5;
|
||||
}
|
||||
|
||||
use Data::Dumper;
|
||||
use SCST::SCST;
|
||||
use File::Temp qw/tempfile/;
|
||||
|
||||
sub setup {
|
||||
my $SCST = shift;
|
||||
|
||||
my ($drivers, $errorString) = $SCST->drivers();
|
||||
my %drivers = map { $_ => 1 } @{$drivers};
|
||||
ok(exists($drivers{'scst_local'}));
|
||||
system("dd if=/dev/zero of=/dev/scstadmin-regression-test-vdisk bs=1M count=1 >/dev/null 2>&1");
|
||||
}
|
||||
|
||||
sub teardown {
|
||||
unlink("/dev/scstadmin-regression-test-vdisk");
|
||||
}
|
||||
|
||||
sub filterScstLocal {
|
||||
my $in = shift;
|
||||
my $out = shift;
|
||||
|
||||
system("awk 'BEGIN { t = 0 } /^# Automatically generated by SCST Configurator v/ { \$0 = \"# Automatically generated by SCST Configurator v...\" } /^TARGET_DRIVER.*{\$/ { if (match(\$0, \"TARGET_DRIVER ([^ ]*) {\", d) && d[1] != \"scst_local\") t = 1 } /^}\$/ { if (t == 1) t = 2 } /^\$/ { if (t == 2) { t = 3 } } /^./ { if (t == 3) { t = 0 } } { if (t == 0) print }' <" . '"' . "$in" . '" >"' . "$out" . '"');
|
||||
}
|
||||
|
||||
sub closeDevs {
|
||||
my $cmd;
|
||||
|
||||
foreach my $dev (@_) {
|
||||
if ($cmd) {
|
||||
$cmd .= " && ";
|
||||
}
|
||||
$cmd .= "$scstadmin -noprompt -handler vdisk_nullio -close_dev $dev";
|
||||
}
|
||||
return system("{ echo " . '"' . "$cmd" . '"' . "; $cmd; } $redirect");
|
||||
}
|
||||
|
||||
sub closeDevTest {
|
||||
my $tmpfilename1 = File::Spec->catfile(File::Spec->tmpdir(),
|
||||
"scstadmin-test-08-$$-1");
|
||||
my $tmpfilename2 = File::Spec->catfile(File::Spec->tmpdir(),
|
||||
"scstadmin-test-08-$$-2");
|
||||
my $rc;
|
||||
|
||||
system("$scstadmin -clear_config -force -noprompt -no_lip $redirect");
|
||||
system("$scstadmin -open_dev nodev -handler vdisk_nullio -attributes dummy=1 $redirect");
|
||||
system("$scstadmin -open_dev disk0 -handler vdisk_fileio -attributes filename=/dev/scstadmin-regression-test-vdisk,read_only=1 $redirect");
|
||||
system("$scstadmin -open_dev disk1 -handler vdisk_fileio -attributes filename=/dev/scstadmin-regression-test-vdisk,nv_cache=1 $redirect");
|
||||
system("$scstadmin -driver scst_local -add_target local $redirect");
|
||||
system("$scstadmin -driver scst_local -target local " .
|
||||
"-add_lun 0 -device nodev $redirect");
|
||||
system("$scstadmin -driver scst_local -target local -add_group ig " .
|
||||
"$redirect");
|
||||
system("$scstadmin -driver scst_local -target local -group ig " .
|
||||
"-add_init ini1 $redirect");
|
||||
system("$scstadmin -driver scst_local -target local -group ig " .
|
||||
"-add_init ini2 $redirect");
|
||||
system("$scstadmin -driver scst_local -target local -group ig " .
|
||||
"-add_lun 0 -device disk0 $redirect");
|
||||
system("$scstadmin -driver scst_local -target local -group ig " .
|
||||
"-add_lun 1 -device disk1 $redirect");
|
||||
system("$scstadmin -write_config $tmpfilename1 >/dev/null");
|
||||
# Keep only the scst_local target driver information.
|
||||
filterScstLocal("$tmpfilename1", "$tmpfilename2");
|
||||
system("cd /sys/kernel/scst_tgt && find -ls $redirect");
|
||||
$rc = system("$scstadmin -dumpAttrs $redirect");
|
||||
ok($rc, 0);
|
||||
$rc = closeDevs("nodev");
|
||||
ok($rc, 0);
|
||||
$rc = closeDevs("disk0", "disk1");
|
||||
ok($rc, 256);
|
||||
system("$scstadmin -noprompt -driver scst_local -target local -group ig " .
|
||||
"-rem_lun 0 -device disk0 $redirect");
|
||||
system("$scstadmin -noprompt -driver scst_local -target local -group ig " .
|
||||
"-rem_lun 1 -device disk1 $redirect");
|
||||
$rc = closeDevs("disk0", "disk1");
|
||||
ok($rc, 0);
|
||||
if ($rc == 0) {
|
||||
unlink($tmpfilename2);
|
||||
unlink($tmpfilename1);
|
||||
}
|
||||
}
|
||||
|
||||
my $_DEBUG_ = 0;
|
||||
if ($_DEBUG_) {
|
||||
$redirect = ">>$redirect_file 2>&1";
|
||||
open(my $logfile, '>>', $redirect_file);
|
||||
select $logfile;
|
||||
} else {
|
||||
$redirect = ">/dev/null";
|
||||
}
|
||||
|
||||
my $SCST = eval { new SCST::SCST($_DEBUG_) };
|
||||
die("Creation of SCST object failed") if (!defined($SCST));
|
||||
|
||||
setup($SCST);
|
||||
|
||||
closeDevTest();
|
||||
|
||||
teardown();
|
||||
@@ -259,6 +259,7 @@ BEGIN {
|
||||
}
|
||||
|
||||
use SCST::SCST 1.0.0;
|
||||
use Data::Dumper;
|
||||
use Getopt::Long;
|
||||
use IO::File;
|
||||
use IO::Dir;
|
||||
@@ -383,6 +384,7 @@ sub getArgs {
|
||||
my $show_usage;
|
||||
my $nonkey;
|
||||
my $force;
|
||||
my $dumpAttrs;
|
||||
|
||||
my $p = new Getopt::Long::Parser;
|
||||
|
||||
@@ -483,6 +485,7 @@ sub getArgs {
|
||||
'noprompt' => \$_NOPROMPT_,
|
||||
'cont_on_err' => \$_CONT_ON_ERR_,
|
||||
'force' => \$force,
|
||||
'dumpAttrs' => \$dumpAttrs,
|
||||
'debug' => \$_DEBUG_))
|
||||
{
|
||||
exit 1;
|
||||
@@ -823,6 +826,7 @@ sub getArgs {
|
||||
|
||||
nonkey => $nonkey,
|
||||
force => $force,
|
||||
dumpAttrs => $dumpAttrs,
|
||||
);
|
||||
return \%args;
|
||||
}
|
||||
@@ -932,6 +936,7 @@ sub main {
|
||||
|
||||
my $nonkey = $args->{nonkey};
|
||||
my $force = $args->{force};
|
||||
my $dumpAttrs = $args->{dumpAttrs};
|
||||
|
||||
$SCST = new SCST::SCST($_DEBUG_);
|
||||
|
||||
@@ -1326,6 +1331,18 @@ sub main {
|
||||
print "\t-> Done.\n";
|
||||
last SWITCH;
|
||||
};
|
||||
defined($dumpAttrs) && do {
|
||||
print "SCST attributes:\n";
|
||||
print Dumper($SCST->scstAttributes());
|
||||
foreach my $handler (sort keys %{$CURRENT{'handler'}}) {
|
||||
my $devices = $CURRENT{'handler'}->{$handler};
|
||||
foreach my $device (sort @{$devices}) {
|
||||
print "Device $device attributes:\n";
|
||||
print Dumper($SCST->deviceAttributes($device));
|
||||
}
|
||||
}
|
||||
last SWITCH;
|
||||
};
|
||||
|
||||
if (!$all_good) {
|
||||
print "No valid operations specified.\n";
|
||||
|
||||
Reference in New Issue
Block a user