--- a/baseintegtests/baseintegrationtest/testsuites/sd/group/fileoperations.pl Mon Oct 19 15:55:17 2009 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,444 +0,0 @@
-#!/usr/bin/perl -w
-# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
-# All rights reserved.
-# This component and the accompanying materials are made available
-# under the terms of the License "Eclipse Public License v1.0"
-# which accompanies this distribution, and is available
-# at the URL "http://www.eclipse.org/legal/epl-v10.html".
-#
-# Initial Contributors:
-# Nokia Corporation - initial contribution.
-#
-# Contributors:
-#
-# Description:
-# This scipt automates the file operations that have to be performed by the user
-# See usage for more details
-#
-#
-
-use strict;
-use File::Copy;
-use FindBin qw($Bin);
-
-sub FormatCard($$)
- {
- my ($location, $hash) = @_;
-
- # Read files
- print "This script will now attempt to format the memory card. If you are using\n";
- print "Windows, please press ENTER, otherwise Ctrl+C this script and format the card\n";
- print "making sure the volume name is '".$hash->{VolumeName}."'.\n";
- $/ = "\n";
- <STDIN>;
- print "format $location /v:".$hash->{VolumeName}." /x\n";
- system "format $location /v:".$hash->{VolumeName}." /x";
- my @files = glob("$location/*");
- if (@files != 0)
- {
- print "Files found on root directory\n";
- return -1;
- }
- return 0;
- }
-
-sub ReadFiles1($$)
- {
- my ($location, $hash) = @_;
- # Check current volume name
-
- # Not supported...
-
- # Read files
- print "Check number of entries in root dir...";
- my @files = glob("$location/*");
- if (@files != $hash->{RootEntries} - $hash->{DeleteRootDirs})
- {
- printf "Expected %d, got %d\n", $hash->{RootEntries} - $hash->{DeleteRootDirs}, @files;
- return -1;
- }
- else
- {
- print "OK!\n";
- }
- #
- print "Check directories are all here...";
- my $i;
- for ($i = $hash->{DeleteRootDirs}; $i < $hash->{RootEntries} / 2; $i++)
- {
- my $dirname = sprintf("$location/dir%03d", $i);
- if (not -d $dirname)
- {
- print "Cannot find $dirname\n";
- return -1;
- }
- }
- print "OK!\n";
- #
- print "Check files and size of expanded files...";
- for ($i = $hash->{RootEntries} / 2; $i < $hash->{RootEntries}; $i++)
- {
- my $filename;
- if ($i - $hash->{RootEntries} / 2 == 0)
- {
- $filename = "$location/LONG FILE NAME";
- }
- elsif ($i - $hash->{RootEntries} / 2 == 1)
- {
- $filename = "$location/Large File";
- }
- else
- {
- $filename = sprintf("$location/file%03d", $i - $hash->{RootEntries} / 2);
- }
- if (not -f $filename)
- {
- print "Cannot find $filename\n";
- return -1;
- }
- if ($i - $hash->{RootEntries} / 2 == 1)
- {
- if (-s $filename != $hash->{LargeFileSize} * (1 << 20))
- {
- printf "$filename: expected size %d got %d", $hash->{ExpandRootFilesSize} * (1 << 20), -s $filename;
- return -1;
- }
- }
- elsif (($i - $hash->{RootEntries} / 2 > 1) and ($i - $hash->{RootEntries} / 2 - 2 < $hash->{ExpandRootFilesNumber}))
- {
- if (-s $filename != $hash->{ExpandRootFilesSize} * (1 << 20))
- {
- printf "$filename: expected size %d got %d", $hash->{ExpandRootFilesSize} * (1 << 20), -s $filename;
- return -1;
- }
- }
- }
- print "OK!\n";
- #
- print "Check subdir entries...";
- @files = glob(sprintf("$location/dir%03d/*", $hash->{RootEntries} / 2 - 1));
- if (@files != $hash->{SubDirEntries})
- {
- printf "Expected %d entries in '$location/dir%03d', got %d", $hash->{SubDirEntries}, $hash->{RootEntries} / 2 - 1, @files;
- return -1;
- }
- for ($i = 0; $i < $hash->{SubDirEntries}; $i++)
- {
- my $filename = sprintf("$location/dir%03d/file%04d", $hash->{RootEntries} / 2 - 1, $i);
- if (not -f $filename)
- {
- print "Cannot find $filename\n";
- return -1;
- }
- }
- print "OK!\n";
- return 0;
- }
-
-sub FileOperations1($$)
- {
-
- my ($location, $hash) = @_;
- my $i;
-
- print "Create root directories...";
- for ($i = 0; $i < $hash->{RootEntries} / 2; $i++)
- {
- my $dirname = sprintf("$location/dir%03d", $i);
- if (!mkdir($dirname))
- {
- print "Error when making $dirname: $!\n";
- return -1;
- }
- }
- print "OK!\n";
- #
- print "Create root files...";
- for ($i = $hash->{RootEntries} / 2; $i < $hash->{RootEntries}; $i++)
- {
- my $filename = sprintf("$location/file%03d", $i - $hash->{RootEntries} / 2);
- open ROOTFILE, ">$filename" or die "Cannot open $filename for output: $!";
- print ROOTFILE "SD";
- close ROOTFILE;
- }
- print "OK!\n";
- #
- print "Expand root files...";
- for ($i = 2; $i < $hash->{ExpandRootFilesNumber} + 2; $i++)
- {
- my $filename = sprintf("$location/file%03d", $i);
- open EXPANDROOTFILE, ">$filename" or die "Cannot open $filename for output: $!";
- print EXPANDROOTFILE "A" x ($hash->{ExpandRootFilesSize} * (1 << 20));
- close EXPANDROOTFILE;
- }
- print "OK!\n";
- #
- print "Delete root directories...";
- for ($i = $hash->{DeleteRootDirs} - 1; $i >= 0; $i--)
- {
- my $dirname = sprintf("$location/dir%03d", $i);
- if (!rmdir($dirname))
- {
- print "Error when removing $dirname";
- return -1;
- }
- }
- print "OK!\n";
- #
- print "Rename 'file000' to 'LONG FILE NAME'...";
- if (!rename("$location/file000", "$location/LONG FILE NAME"))
- {
- print "failed\n";
- return -1;
- }
- print "OK!\n";
- #
- print "Create subdir entries...";
- for ($i = 0; $i < $hash->{SubDirEntries}; $i++)
- {
- my $filename = sprintf("$location/dir%03d/file%04d", $hash->{RootEntries} / 2 - 1, $i);
- open SUBDIRFILE, ">$filename" or die "Can't open $filename for output: $!\n";
- print SUBDIRFILE "SD";
- close SUBDIRFILE;
- }
- print "OK!\n";
- #
- print "Rename 'file001' to 'Large File'...";
- if (!rename("$location/file001", "$location/Large File"))
- {
- print "failed\n";
- return -1;
- }
- print "OK!\n";
- #
- print "Expand Large File...";
- open EXPANDLARGEFILE, ">$location/Large File" or die "Cannot open '$location/Large File' for output: $!";
- print EXPANDLARGEFILE "B" x ($hash->{LargeFileSize} * (1 << 20));
- close EXPANDLARGEFILE;
- print "OK!\n";
- #
- return 0;
- }
-
-sub FileOperations2($$)
- {
- my ($location, $hash) = @_;
- my $i;
-
- print "Change volume name...\n";
- print "WARNING: If not under Windows, change the volume name manually to '".$hash->{VolumeName}."' afterwards.\n";
- print "label $location ".$hash->{VolumeName};
- system "label $location ".$hash->{VolumeName};
- print "OK!\n";
- #
- print "Delete subdir entries...";
- for ($i = 0; $i < $hash->{SubDirEntries}; $i++)
- {
- my $filename = sprintf("$location/dir%03d/file%04d", $hash->{RootEntries} / 2 - 1, $i);
- if (!unlink($filename))
- {
- print "Cannot delete $filename\n";
- return -1;
- }
- }
- print "OK!\n";
- #
- print "Create subdir entries...";
- for ($i = 0; $i < $hash->{SubDirEntries}; $i++)
- {
- my $filename = sprintf("$location/dir%03d/file%04d", $hash->{RootEntries} / 2 - 2, $i);
- open SUBDIRFILE, ">$filename" or die "Can't open $filename for output: $!\n";
- print SUBDIRFILE "SD";
- close SUBDIRFILE;
- }
- print "OK!\n";
- #
- print "Move 'LONG FILE NAME' to tmp dir...";
- if (!move("$location/LONG FILE NAME", $ENV{TMP}."/"))
- {
- print "Cannot move '$location/LONG FILE NAME' to '".$ENV{TMP}."/'\n";
- return -1;
- }
- print "OK!\n";
- #
- print "Copy 'file002' to tmp dir...";
- if (!copy("$location/file002", $ENV{TMP}."/"))
- {
- print "Cannot copy '$location/file002' to '".$ENV{TMP}."/'\n";
- return -1;
- }
- print "OK!\n";
- #
- print "Copy 'file002' back to card...";
- if (!copy($ENV{TMP}."/file002", "$location/BACK"))
- {
- print "Cannot copy '".$ENV{TMP}."/file002' to '$location/BACK'\n";
- return -1;
- }
- print "OK!\n";
- return 0;
- }
-
-sub Usage()
- {
- print STDERR <<USAGE_END;
-fileoperations.pl
-Description:
- This script works in conjunction with the SD manual interoperability tests.
- When running these tests, the user will be invited to perform specific file
- operations from another device than the one under test. This Perl script
- automates the execution of those file operations.
-
- There are two sets of actions that can be performed by this Perl script,
- 'INBOUND' and 'OUTBOUND'. The user will be clearly notified as to which set
- of actions to carry out.
-
- This script can be run from any directory, but should be left within the
- source code directory tree as it requires access to the test INI file.
-Usage:
- fileoperations.pl <type> <location>
-Where:
- type 'OUTBOUND' or 'INBOUND'
- location Memory card root directory
-E.g.:
- fileoperations.pl OUTBOUND M:
- fileoperations.pl INBOUND /mnt/sdcard
-USAGE_END
- }
-
-sub Main()
- {
- # Verify arguments
- if (@ARGV != 2)
- {
- print STDERR "ERROR: Wrong number of arguments\n";
- Usage();
- return -1;
- }
- my ($type, $location) = @ARGV;
- $type = uc($type);
- if ($type ne 'OUTBOUND' and $type ne 'INBOUND')
- {
- print STDERR "ERROR: Invalid type '$type'\n";
- Usage();
- return -1;
- }
- if (not -d "$location/")
- {
- print STDERR "ERROR: '$location/' is not a valid directory\n";
- Usage();
- return -1;
- }
- if (not -e "$Bin/../testdata/btsd.ini")
- {
- print STDERR "ERROR: Cannot find $Bin/../testdata/btsd.ini\n";
- return -1;
- }
-
- # Get values from INI file
- my %inival = (
- RootEntries => 0,
- ExpandRootFilesNumber => 0,
- ExpandRootFilesSize => 0,
- DeleteRootDirs => 0,
- SubDirEntries => 0,
- LargeFileSize => 0,
- VolumeName => '');
- open INIFILE, "$Bin/../testdata/btsd.ini" or die "ERROR: Cannot open $Bin/../testdata/btsd.ini for read: $!\n";
- while (<INIFILE>)
- {
- $/ = '[';
- next unless /INTEROP_$type\]/;
-
- if (not /FileOperationsRootEntries=(\d+)/)
- {
- print STDERR "ERROR: FileOperationsRootEntries entry not found in INI file\n";
- return -1;
- }
- $inival{RootEntries} = $1;
-
- if (not /FileOperationsExpandRootFilesNumber=\s*(\d+)/)
- {
- print STDERR "ERROR: FileOperationsExpandRootFilesNumber entry not found in INI file\n";
- return -1;
- }
- $inival{ExpandRootFilesNumber} = $1;
-
- if (not /FileOperationsExpandRootFilesSize=\s*(\d+)/)
- {
- print STDERR "ERROR: FileOperationsExpandRootFilesSize entry not found in INI file\n";
- return -1;
- }
- $inival{ExpandRootFilesSize} = $1;
-
- if (not /FileOperationsDeleteRootDirs=\s*(\d+)/)
- {
- print STDERR "ERROR: FileOperationsDeleteRootDirs entry not found in INI file\n";
- return -1;
- }
- $inival{DeleteRootDirs} = $1;
-
- if (not /FileOperationsSubDirEntries=\s*(\d+)/)
- {
- print STDERR "ERROR: FileOperationsSubDirEntries entry not found in INI file\n";
- return -1;
- }
- $inival{SubDirEntries} = $1;
-
- if (not /FileOperationsLargeFileSize=\s*(\d+)/)
- {
- print STDERR "ERROR: FileOperationsLargeFileSize entry not found in INI file\n";
- return -1;
- }
- $inival{LargeFileSize} = $1;
-
- if (not /FileOperationsVolumeName=\s*([^\n]+)/)
- {
- print STDERR "ERROR: FileOperationsVolumeName entry not found in INI file\n";
- return -1;
- }
- $inival{VolumeName} = $1;
- $inival{VolumeName} =~ s/\s+$//; # Remove trailing whitespaces
- }
- close INIFILE;
- print "Values read from $Bin/../testdata/btsd.ini:\n";
- print "FileOperationsRootEntries=${inival{RootEntries}}\n";
- print "FileOperationsExpandRootFilesNumber=${inival{ExpandRootFilesNumber}}\n";
- print "FileOperationsExpandRootFilesSize=${inival{ExpandRootFilesSize}}\n";
- print "FileOperationsDeleteRootDirs=${inival{DeleteRootDirs}}\n";
- print "FileOperationsSubDirEntries=${inival{SubDirEntries}}\n";
- print "FileOperationsLargeFileSize=${inival{LargeFileSize}}\n";
- print "FileOperationsVolumeName=${inival{VolumeName}}\n\n";
-
- my $retval;
- print "READ CONTENTS OF MEMORY CARD\n";
- if ($type eq 'INBOUND')
- {
- $retval = FormatCard($location, \%inival);
- }
- else
- {
- $retval = ReadFiles1($location, \%inival);
- }
- if ($retval)
- {
- return $retval;
- }
- print "PERFORM MORE FILE OPERATIONS\n";
- if ($type eq 'INBOUND')
- {
- $retval = FileOperations1($location, \%inival);
- }
- else
- {
- $retval = FileOperations2($location, \%inival);
- }
- if (not $retval)
- {
- print "FILE OPERATIONS WERE SUCCESFUL\n";
- print "Now insert card back into the device under test or disconnect USB cable.\n";
- }
- return $retval;
- }
-
-exit Main();