#!/bin/bash
touch expectedExit
touch realExit
error=0
echo "testcase 4.1"
echo "проверка обработки двух параметров"
echo "описание: в скрипт script передаётся два параметра"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "invalid number of parameters"
echo "invalid number of parameters" > expectedExit
echo "код возврата:"
echo "2"
echo "2" >> expectedExit
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE WHAT.BAT > realExit
cat realExit
echo "код возврата:"
./script WHERE WHAT.BAT > /dev/null
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.1 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.1"
error=$[error+1]
fi
echo ""
echo "testcase 4.1"
echo "проверка обработки одного параметра"
echo "описание: в скрипт script передаётся один параметр"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "invalid number of parameters"
echo "invalid number of parameters" > expectedExit
echo "код возврата:"
echo "2"
echo "2" >> expectedExit
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE > realExit
cat realExit
echo "код возврата:"
./script WHERE > /dev/null
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.1 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.1"
error=$[error+1]
fi
echo ""
echo "testcase 4.1"
echo "проверка обработки нуля параметров"
echo "описание: в скрипт script параметры не передаются"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "invalid number of parameters"
echo "invalid number of parameters" > expectedExit
echo "код возврата:"
echo "2"
echo "2" >> expectedExit
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script > realExit
cat realExit
echo "код возврата:"
./script > /dev/null
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.1 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.1"
error=$[error+1]
fi
echo ""
echo "testcase 4.2"
echo "проверка обработки недопустимого символа '/' в имени файла"
echo "описание: в скрипт script передаётся параметр WH/AT.BAT"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "invalid name of parameter WH/AT.BAT"
echo "invalid name of parameter WH/AT.BAT" > expectedExit
echo "код возврата:"
echo "5"
echo "5" >> expectedExit
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE WH/AT.BAT ADD > realExit
cat realExit
echo "код возврата:"
./script WHERE WH/AT.BAT ADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.2 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.2"
error=$[error+1]
fi
echo ""
echo "testcase 4.3"
echo "проверка работы программы с несуществующим файлом ADD"
echo "описание: в скрипт script передаётся параметр ADD, который не существует"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "file ADD doesn't exist"
echo "file ADD doesn't exist" > expectedExit
echo "код возврата:"
echo "1"
echo "1" >> expectedExit
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE WHAT.BAT NOADD > realExit
cat realExit
echo "код возврата:"
./script WHERE WHAT.BAT NOADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.3 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.3"
error=$[error+1]
fi
echo ""
echo "testcase 4.4"
echo "проверка работы программы с файлом ADD, не имеющем права на чтение"
echo "описание: в скрипт script передаётся параметр ADD, который не имеет права на чтение"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "file ADD has insufficient access rights"
echo "file ADD has insufficient access rights" > expectedExit
echo "код возврата:"
echo "1"
echo "1" >> expectedExit
echo "РЕАЛЬНЫЙ ВЫХОД:"
chmod -r ./Test/ADD
./script WHERE WHAT.BAT Test/ADD > realExit
cat realExit
echo "код возврата:"
./script WHERE WHAT.BAT Test/ADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.4 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.4"
error=$[error+1]
fi
chmod +r ./Test/ADD
echo ""
echo "testcase 4.5"
echo "проверка работы программы с несуществующим каталогом WHERE"
echo "описание: в скрипт script передаётся каталог NOWHERE, который не существует"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "directory WHERE doesn't exist"
echo "directory WHERE doesn't exist" > expectedExit
echo "код возврата:"
echo "3"
echo "3" >> expectedExit
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script NOWHERE WHAT.BAT Test/ADD > realExit
cat realExit
echo "код возврата:"
./script NOWHERE WHAT.BAT Test/ADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.5 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.5"
error=$[error+1]
fi
echo ""
echo "testcase 4.6"
echo "проверка работы программы с каталогом WHERE, не имеющем права на запись"
echo "описание: в скрипт script передаётся каталог WHERE, который не имеет права на запись"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "parameter WHERE has insufficient access rights"
echo "parameter WHERE has insufficient access rights" > expectedExit
echo "код возврата:"
echo "6"
echo "6" >> expectedExit
chmod -w ./WHERE
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE WHAT.BAT Test/ADD > realExit
cat realExit
echo "код возврата:"
./script WHERE WHAT.BAT Test/ADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.6 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.6"
error=$[error+1]
fi
chmod +w ./WHERE
echo ""
echo "testcase 4.7"
echo "проверка работы программы с каталогом WHERE, не имеющем права на исполнение"
echo "описание: в скрипт script передаётся каталог WHERE, который не имеет права на исполнение"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "parameter WHERE has insufficient access rights"
echo "parameter WHERE has insufficient access rights" > expectedExit
echo "код возврата:"
echo "6"
echo "6" >> expectedExit
chmod -x ./WHERE
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE WHAT.BAT Test/ADD > realExit
cat realExit
echo "код возврата:"
./script WHERE WHAT.BAT Test/ADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.7 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.7"
error=$[error+1]
fi
chmod +x ./WHERE
echo ""
echo "testcase 4.8"
echo "проверка работы программы с каталогом WHERE, изначально содержащим файл WHAT.BAT"
echo "описание: в скрипт script передаётся каталог WHERE, который содержит файл WHAT.BAT"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "directory WHERE already consists file WHAT.BAT"
echo "directory WHERE already consists file WHAT.BAT" > expectedExit
echo "код возврата:"
echo "6"
echo "6" >> expectedExit
touch ./WHERE/WHAT.BAT
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE WHAT.BAT Test/ADD > realExit
cat realExit
echo "код возврата:"
./script WHERE WHAT.BAT Test/ADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.8 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.8"
error=$[error+1]
fi
rm ./WHERE/WHAT.BAT > /dev/null 2>&1
rm ./WHAT.BAT
echo ""
echo "testcase 4.9"
echo "проверка работы программы с несуществующим файлом ./WHAT.BAT в текущем каталоге, не имеющем права на запись"
echo "описание: в скрипт script передаётся каталог несуществующий файл WHAT.BAT, при этом у текущего каталога отбирается право на запись"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "current path has insufficient access rights"
echo "current path has insufficient access rights" > expectedExit
echo "код возврата:"
echo "4"
echo "4" >> expectedExit
chmod -w ./
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE WHAT.BAT Test/ADD > realExit
cat realExit
echo "код возврата:"
./script WHERE WHAT.BAT Test/ADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "тестовый случай 4.9 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.9"
error=$[error+1]
fi
chmod +w ./
n=0
rm ./WHAT.BAT > /dev/null 2>&1
rm comparefile > /dev/null 2>&1
rm Test/ADD
touch Test/ADD
echo "l" > Test/ADD
echo ""
echo "testcase 4.10"
echo "проверка работы программы с несуществующим файлом ./WHAT.BAT в текущем каталоге, который имеет право на запись"
echo "описание: в скрипт script передаётся несуществующий файл WHAT.BAT, файл ADD из каталога Test, содержащий единственный символ 'l', при этом у текущего каталога есть право на запись"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "код возврата:"
echo "0"
echo "0" > expectedExit
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE WHAT.BAT Test/ADD > realExit
cat realExit
echo "код возврата:"
#./script WHERE WHAT.BAT Test/ADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "коды возврата ожидаемый и реальный совпадают"
else
echo "скрипт содержит ошибку в тест-требовании 4.10"
error=$[error+1]
n=1
fi
touch comparefile
echo "l" > comparefile
echo "name=./WHAT.BAT" >> comparefile
diff ./WHAT.BAT comparefile
q=$?
if [[ $q -eq 0 ]]; then
echo "ожидаемое и предполагаемое содержимое файла ./WHAT.BAT совпадают"
echo "тестовый случай 4.10 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.10"
if [[$n -eq 0 ]]; then
error=$[error+1]
fi
fi
n=0
rm ./WHAT.BAT
rm comparefile
#удаляем все файлы и папки в директории WHERE(на всякий случай, т.к. в тест-плане каталог WHERE пустой)
rm -r WHERE
mkdir WHERE
echo "m"> ./WHAT.BAT
echo ""
echo "testcase 4.11"
echo "проверка добавления файла ADD в файл ./WHAT.BAT и записи в каталог WHERE"
echo "описание: в скрипт script передаётся существующий файл WHAT.BAT, содержащий один символ 'm', файл ADD из директории Test, содержащий один символ l, при этом каталог WHERE пуст"
echo "ОЖИДАЕМЫЙ ВЫХОД:"
echo "код возврата:"
echo "0"
echo "0" > expectedExit
echo "РЕАЛЬНЫЙ ВЫХОД:"
./script WHERE WHAT.BAT Test/ADD > realExit
cat realExit
echo "код возврата:"
#./script WHERE WHAT.BAT Test/ADD > /dev/null 2>&1
q=$?
echo $q
echo $q >> realExit
diff expectedExit realExit
q=$?
if [[ $q -eq 0 ]]; then
echo "коды возврата ожидаемый и реальный совпадают"
else
echo "скрипт содержит ошибку в тест-требовании 4.11"
error=$[error+1]
n=1
fi
touch comparefile
echo "l" > comparefile
echo "m" >> comparefile
diff ./WHAT.BAT comparefile
q=$?
if [[ $q -eq 0 ]]; then
echo "ожидаемое и предполагаемое содержимое файла ./WHAT.BAT совпадают"
else
echo "скрипт содержит ошибку в тест-требовании 4.11"
if [[$n -eq 0 ]]; then
error=$[error+1]
fi
fi
diff ./WHAT.BAT comparefile
q=$?
#проверяем соответствие файлов ./WHAT.BAT и WHERE/WHAT.BAT
diff ./WHAT.BAT WHERE/WHAT.BAT
q=$?
if [[ $q -eq 0 ]]; then
echo "ожидаемое и предполагаемое содержимое файла WHERE/WHAT.BAT совпадают"
echo "тестовый случай 4.11 пройден"
else
echo "скрипт содержит ошибку в тест-требовании 4.11"
if [[$n -eq 0 ]]; then
error=$[error+1]
fi
fi
echo "_________________________________________________________"
echo "всего ошибок:" "$error"
Спецификация к лабораторной работе №1
1. Общее описание
Программа разрабатывает исполняемый файл (shell-процедуру) с тремя параметрами:
первый - WHERE имя каталога;
второй - WHAT имя файла;
третий - ADD имя файла;
Процедура должна проверять существование в текущем каталоге файла с именем WHAT и расширением BAT.
Если такой файл есть, то к нему надо добавить в начало файл ADD, записав в каталог WHERE.
Если такого файла нет, то его надо создать в текущем каталоге, записав в него файл ADD и дописать в конец строку
NAME = <имя созданного файла>
Язык реализации – bash
2. Интерфейс программы
2.1. Входные данные
2.1.1. Параметры программы
[WHERE, WHAT, ADD]
[WHAT] – обязательный параметр – имя файла (не содержит символ “/”)
[WHERE], [ADD] – обязательные параметры – имя каталога, в который нужно записать конечный файл, и имя файла, который нужно скопировать.
Если файл ./WHAT.BAT, существует в текущем каталоге, то каталог WHERE должен существовать, иметь право на запись и исполнение и не должен содержать файл WHAT.BAT .
Файл ADD должен иметь право на чтение.
Если файл ./WHAT.BAT существует, должен иметь право на запись и на чтение.
Текущий каталог должен иметь право на запись, если в нём существует файл WHAT.BAT.
Процедура предполагает наличие не менее трёх параметров.
2.2. Выходные данные
2.2.1. Сообщения программы
2.2.1.1 «directory WHERE already consists file WHAT.BAT» - в каталоге WHERE уже присутствует файл с именем WHAT.BAT.
2.2.1.2 «directory WHERE doesn’t exist» - указанный каталог WHERE не существует.
2.2.1.3 «invalid number of parameters» - недостаточное количество параметров.
2.2.1.4 «invalid name of parameter WHAT» - имя параметра WHAT содержит недопустимый символ «/»
2.2.1.5 «file ADD doesn’t exist» - указанный файл ADD не существует.
2.2.1.6 «current path has insufficient access rights» - у текущего каталога недостаточно прав.
2.2.1.7 «parameter WHERE has insufficient access rights» - у каталога WHERE недостаточно прав.
2.2.1.8 «file ADD has insufficient access rights» - у файла ADD недостаточно прав.
2.2.2 Коды возврата программы.
2.2.2.1 Если существующий файл ADD добавлен к существующему файлу ./WHAT.BAT, то код возврата 0.
2.2.2.2 Если файл ADD не существует или файл ADD не имеет право на чтение, то код возврата 1.
2.2.2.3 Если введено количество параметров, меньшее трёх, то код возврата 2.
2.2.2.4 Если файл ADD не был добавлен к файлу ./WHAT.BAT по причине отсутствия каталога WHERE, то код возврата 3.
2.2.2.5 Если файл ./WHAT.BAT не существует, а текущий каталог не имеет права на запись, то код возврата 4.
2.2.2.5 Если файл ADD не был добавлен к файлу ./WHAT.BAT по причине присутствия недопустимого символа «/» в имени параметра WHAT, то код возврата 5.
2.2.2.6 Если файл ./WHAT.BAT не был скопирован в каталог WHERE по причине отсутствия права на запись или права на исполнение у каталога WHERE, то код возврата 6.
2.2.4 Содержимое каталогов после работы программы
Если файл ./WHAT.BAT, не существовал, то после работы программы он появится в текущем каталоге и будет содержать файл ADD и строку “name=./WHAT.BAT”.
Если файл ./WHAT.BAT, существовал в текущем каталоге, то после работы программы он будет перемещён в каталог, задаваемый параметром WHERE, и будет содержать файл ADD в начале.
3. Функциональные требования
3.1. Требования к параметрам ввода.
3.1.1. Если программе было передано < 3 параметров, то она должна вывести на стандартное устройство вывода сообщение 2.2.1.3 и завершить свою работу с кодом возврата 2.
3.1.2. Если параметр WHAT содержит недопустимый символ “/”, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.4 и завершить свою работу с кодом возврата 5.
3.1.3. Если файл ADD не существует, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.5 и завершить свою работу с кодом возврата 1.
3.1.4. Если файл ADD существует, но не имеет права на чтение, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.8 и завершить свою работу с кодом возврата 1.
3.1.5 В случае если файл ./WHAT.BAT существует, файл ADD существует и имеет право на чтение, а каталог WHERE не существует, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.2 и завершить свою работу с кодом возврата 3.
3.1.6 В случае если файл ./WHAT.BAT существует, файл ADD существует и имеет право на чтение, а каталог WHERE существует, но не имеет права на запись, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.7 и завершить свою работу с кодом возврата 6.
3.1.7 В случае если файл ./WHAT.BAT существует, файл ADD существует и имеет право на чтение, а каталог WHERE существует, но не имеет права на исполнение, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.7 и завершить свою работу с кодом возврата 6.
3.1.8 В случае если файл ./WHAT.BAT существует, файл ADD существует и имеет право на чтение, каталог WHERE существует, имеет право на запись и исполнение, но содержит файл c названием WHAT.BAT, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.1 и завершить свою работу с кодом возврата 6.
3.1.9 Если файл ./WHAT.BAT не существует в текущем каталоге, который не имеет права на запись, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.6 и завершить свою работу с кодом возврата 4
3.1.10. Если файл ADD существует и имеет право на чтение, ./WHAT.BAT не существует в текущем каталоге, имеющем право на запись, то программа должна создать файл ./WHAT.BAT в текущем каталоге, записать в него содержимое файла ADD, дописать в конец строку “name = ./WHAT.BAT” и завершить свою работу с кодом возврата 0.
3.1.11. Если файл ADD существует и имеет право на чтение, файл ./WHAT.BAT существует и имеет право на запись и на чтение, а каталог WHERE имеет право на исполнение и запись, причём в каталоге WHERE нет файла с именем WHAT.BAT, то программа должна добавить в начало файла ./WHAT.BAT файл ADD, скопировать ./WHAT.BAT в каталог WHERE и завершить свою работу с кодом возврата 0.
4. Тестовые требования
4.1. Проверить, что если программе не было передано ни одного параметра (или число параметров < 3), то она выводит на стандартное устройство вывода сообщение 2.2.1.3 и завершает свою работу с кодом возврата 2.
4.2. Проверить, что если параметр WHAT содержит недопустимый символ “/”, то программа выводит на стандартное устройство вывода сообщение 2.2.1.4 и завершает свою работу с кодом возврата 5.
4.3. Проверить, что если файл ADD не существует, то программа должна выводит на стандартное устройство вывода сообщение 2.2.1.5 и завершить свою работу с кодом возврата 1.
4.4. Проверить, что если файл ADD существует, но не имеет права на чтение, то программа выводит на стандартное устройство вывода сообщение 2.2.1.8 и завершает свою работу с кодом возврата 1.
4.5 Проверить, что если файл ./WHAT.BAT существует, файл ADD существует и имеет право на чтение, а каталог WHERE не существует, то программа выводит на стандартное устройство вывода сообщение 2.2.1.2 и завершает свою работу с кодом возврата 3.
4.6 Проверить, что если файл ./WHAT.BAT существует, файл ADD существует и имеет право на чтение, а каталог WHERE существует, но не имеет права на запись, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.7 и завершает свою работу с кодом возврата 6.
4.7 Проверить, что если файл ./WHAT.BAT существует, и каталог WHERE существует, но не имеет права на исполнение, то программа выводит на стандартное устройство вывода сообщение 2.2.1.7 и завершает свою работу с кодом возврата 6.
4.8 Проверить, что если файл ./WHAT.BAT существует, файл ADD существует и имеет право на чтение, каталог WHERE существует, имеет право на запись и исполнение, но содержит файл c названием WHAT.BAT, то программа должна вывести на стандартное устройство вывода сообщение 2.2.1.1 и завершить свою работу с кодом возврата 6.
4.9 Проверить, что если файл ./WHAT.BAT не существует в текущем каталоге, который не имеет права на запись, то программа выводит на стандартное устройство вывода сообщение 2.2.1.6 и завершить свою работу с кодом возврата 4.
4.10. Проверить, что если файл ADD существует и имеет право на чтение, ./WHAT.BAT не существует в текущем каталоге, имеющем право на запись, то программа создаёт файл ./WHAT.BAT в текущем каталоге, записывает в него содержимое файла ADD, дописывает в конец строку “name = ./WHAT.BAT” и завершает свою работу с кодом возврата 0.
4.11.Проверить, что если файл ADD существует и имеет право на чтение, файл ./WHAT.BAT существует и имеет право на запись и на чтение, а каталог WHERE имеет право на исполнение и запись, причём в каталоге WHERE нет файла с именем WHAT.BAT, то программа добавляет в начало файла ./WHAT.BAT файл ADD, копирует ./WHAT.BAT в каталог WHERE и завершает свою работу с кодом возврата 0.