АПКШ «Континент»: автоматизированное тестирование платформы с занесение результатов в PostgreSQL

Материал из Национальной библиотеки им. Н. Э. Баумана

АПКШ «Континент» (программный комплекс шифрования «Континент») — аппаратно-программный комплекс, позволяющий обеспечить защиту информационных сетей организации от вторжения со стороны сетей передачи данных (Интернет), конфиденциальность при передаче информации по открытым каналам связи (VPN), организовать безопасный доступ пользователей VPN к ресурсам сетей общего пользования, а также защищенное взаимодействие сетей различных организаций.

Автоматизация тестирования служит для облегчения работы тестировщика и улучшения качества тестирования, а значит и продукта в целом. В процессе тестирования используется большое количество данных, которое необходимо где-то хранить. Для этого прекрасно подходят базы данных.

Kontinent.gif

Назначение

Комплекс обеспечивает криптографическую защиту информации (в соответствии с ГОСТ 28147–89), передаваемой по открытым каналам связи, между составными частями VPN, которыми могут являться локальные вычислительные сети, их сегменты и отдельные компьютеры.[Источник 1][Источник 2]

Современная ключевая схема, реализуя шифрование каждого пакета на уникальном ключе, обеспечивает гарантированную защиту от возможности дешифрации перехваченных данных.

Для защиты от проникновения со стороны сетей общего пользования комплекс «Континент» 3.7 обеспечивает фильтрацию принимаемых и передаваемых пакетов по различным критериям (адресам отправителя и получателя, протоколам, номерам портов, дополнительным полям пакетов и т.д.). Осуществляет поддержку VoIP, видеоконференций, ADSL, Dial-Up и спутниковых каналов связи, технологии NAT/PAT для сокрытия структуры сети.

Автоматизация тестирования

Любая группа разработчиков программного обеспечения тестирует свои продукты. Инженеры-испытатели стремятся поймать ошибки перед выпуском продукта, но они всегда появляются снова, даже при лучших процессах ручного тестирования. Автоматизация тестирования - лучший способ повысить качество, скорость и охват тестирования программного обеспечения.

Ручное тестирование программного обеспечения осуществляется человеком, сидящим перед компьютером. Ручные тесты часто возникают во время циклов разработки для изменений исходного кода и других ситуаций, таких как несколько операционных сред и аппаратных конфигураций. Инструмент автоматического тестирования способен воспроизводить предварительно записанные и предопределенные действия, сравнивать результаты с ожидаемым поведением. После создания автоматических тестов их можно легко восстановить. Из-за этого опытные менеджеры обнаружили, что автоматическое тестирование программного обеспечения является важным компонентом успешных проектов развития.

Автоматизированное тестирование программного обеспечения было признано критически важным этапом разработки для крупных организаций по разработке программного обеспечения.

В процессе автоматизации возникает вопрос, а как же хранить данные, необходимые для самого тестирования. Для решения данной задачи мы будем использовать базу данных PostgreSQL.

Проектирование базы данных

Анализ предметной области

Информация в базах данных автоматизированного тестирования динамично меняется:

  • Добавляются новые платформы
  • Каждая новая платформа тестируется, поэтому постоянно заносятся в таблицы новые данные по тестам.

Данные факторы определяют цели создания Базы Данных.

Цели создания данной Базы Данных

  • Хранить значения производительности
  • Отслеживать бракованные платформы
  • Хранить результаты тестирования
  • Оценивать динамику тестирования

Определившись со списком целей и задач, выполнение которых база данных должна обеспечивать, приступаем к построению инфологической модели:

InfologShContinent.jpg

Подход к проектированию

Опишем сущности, которые должны взаимодействовать друг с другом.

Определим 16 сущностей.

Сущность Атрибуты
Exit control
  • id
  • name_platform_passport_platform
  • id_test_plan
  • serial_number
  • last_echo
  • Acknowledge
  • status
  • log
  • start_exit
  • end_exit
  • current_status
  • version
  • username
  • bad_list
Test plan
  • id
  • id_test_cpu
  • id_test_ssd
  • id_test_sobol
  • id_test_ethernet
  • id_test_bios
  • id_stress_test_cpu
  • id_stress_test_ethernet
  • id_stress_test_memory
  • id_stress_test_sobol
  • id_test_memory
  • id_test_hardware
test_cpu
  • id
  • max_temp
  • result
  • status
  • start_test
  • end_test
  • log
  • idle_temp
  • count_cpu
  • cpu_frequency
test_ssd
  • id
  • result
  • status
  • start_test
  • end_test
  • log
  • disk_size
test_sobol
  • id
  • result
  • status
  • start_test
  • end_test
  • log
test_ethernet
  • id
  • result
  • status
  • start_test
  • end_test
  • log
test_bios
  • id
  • result
  • status
  • start_test
  • end_test
  • log
  • bios_version
smoke_interface_speed
  • id
  • name
  • media
  • speed
  • id_test_ethernet
test_memory
  • id
  • result
  • status
  • start_test
  • end_test
  • log
  • mem_size
  • type_ram
test_hardware
  • id
  • result
  • status
  • start_test
  • end_test
  • log
stress_test_sobol
  • id
  • result
  • status
  • start_test
  • end_test
  • log
stress_test_memory
  • id
  • result
  • status
  • start_test
  • end_test
  • log
stress_test_ethernet
  • id
  • result
  • status
  • start_test
  • log
  • end_test
stress_interface_speed
  • id
  • id_stress_test_ethernet
  • name
  • media
  • speed
stress_test_cpu
  • id
  • result
  • status
  • start_test
  • end_test
  • log
  • idle_temp
  • max_temp
passport_platform
  • name_platform
  • bios_version
  • cpu_frequency
  • cpu_count
  • mem_size
  • disk_size
  • ethernet_copper_100
  • ethernet_copper_1000
  • ethernet_optic_1000
  • ethernet_optic_10g
  • id
  • version
  • reboot
  • product
  • mod0
  • mod1
  • mod2

Критерии определения структуры СУБД

Для построения спроектированной базы данных автоматизированного тестирования используется PostgreSQL.

Физическая реализация базы данных

Создание реляционной модели

Continetnt db scheme2.png

Мы создаем таблицы, которые соответствуют нашим 16 сущностям, которые мы описали ранее. Итак, было создано 16 таблиц:

Continent1.png

Каждую таблицу можно открыть и посмотреть еe данные:

Continent2.png

Данные в таблицы заносятся через подключение к БД с помощью Python. Далее приведен вывод значений таблиц:

  • Таблица Exit_control
Continent3.png
  • Таблица test_plan
Continent4.png

Для облегчения работы с БД были написаны следующие функции:

Continent5.png

Коды функций

-- FUNCTION: public.delete_all()

-- DROP FUNCTION public.delete_all();

CREATE OR REPLACE FUNCTION public.delete_all(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

BEGIN
	DELETE FROM exit_control;
	DELETE FROM smoke_interface_speed;
	DELETE FROM stress_test_cpu;
	DELETE FROM stress_test_ethernet;
	DELETE FROM stress_test_memory;
	DELETE FROM stress_test_sobol;
	DELETE FROM test_bios;
	DELETE FROM test_cpu;	
	DELETE FROM test_ethernet;
	DELETE FROM test_memory;
	DELETE FROM test_plan;
	DELETE FROM test_sobol;
	DELETE FROM test_ssd;
	DELETE FROM test_hardware;

	return 1;
END;

$BODY$;

ALTER FUNCTION public.delete_all()
    OWNER TO postgres;
-- FUNCTION: public.get_id_lost_connection(bigint)

-- DROP FUNCTION public.get_id_lost_connection(bigint);

CREATE OR REPLACE FUNCTION public.get_id_lost_connection(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from stress_test_ethernet where id = 
	(select id_stress_test_ethernet from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id and (now() - interval '4 minutes') > last_echo))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_lost_connection(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_current_status(bigint)

-- DROP FUNCTION public.get_current_status(bigint);

CREATE OR REPLACE FUNCTION public.get_current_status(
	exit_control_id bigint)
RETURNS boolean
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
r2 boolean;
BEGIN

select count(result) from	
(select result from get_standart_rows_in_smoke_tests(exit_control_id) where result = false
union all
select result from get_standart_rows_in_stress_tests(exit_control_id) where result = false) as tmp
into r;

if r>0 
	then r2 = false;
else 
	r2 = true;
end if;
return r2;
END;

$BODY$;

ALTER FUNCTION public.get_current_status(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_lost_connection(bigint)

-- DROP FUNCTION public.get_id_lost_connection(bigint);

CREATE OR REPLACE FUNCTION public.get_id_lost_connection(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from stress_test_ethernet where id = 
	(select id_stress_test_ethernet from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id and (now() - interval '4 minutes') > last_echo))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_lost_connection(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_stress_test_cpu(bigint)

-- DROP FUNCTION public.get_id_stress_test_cpu(bigint);

CREATE OR REPLACE FUNCTION public.get_id_stress_test_cpu(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from stress_test_cpu where id = 
	(select id_stress_test_cpu from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_stress_test_cpu(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_stress_test_ethernet(bigint)

-- DROP FUNCTION public.get_id_stress_test_ethernet(bigint);

CREATE OR REPLACE FUNCTION public.get_id_stress_test_ethernet(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from stress_test_ethernet where id = 
	(select id_stress_test_ethernet from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_stress_test_ethernet(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_stress_test_memory(bigint)

-- DROP FUNCTION public.get_id_stress_test_memory(bigint);

CREATE OR REPLACE FUNCTION public.get_id_stress_test_memory(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from stress_test_memory where id = 
	(select id_stress_test_memory from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_stress_test_memory(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_stress_test_sobol(bigint)

-- DROP FUNCTION public.get_id_stress_test_sobol(bigint);

CREATE OR REPLACE FUNCTION public.get_id_stress_test_sobol(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from stress_test_sobol where id = 
	(select id_stress_test_sobol from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_stress_test_sobol(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_test_bios(bigint)

-- DROP FUNCTION public.get_id_test_bios(bigint);

CREATE OR REPLACE FUNCTION public.get_id_test_bios(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from test_bios where id = 
	(select id_test_bios from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_test_bios(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_test_cpu(bigint)

-- DROP FUNCTION public.get_id_test_cpu(bigint);

CREATE OR REPLACE FUNCTION public.get_id_test_cpu(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from test_cpu where id = 
	(select id_test_cpu from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_test_cpu(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_test_ethernet(bigint)

-- DROP FUNCTION public.get_id_test_ethernet(bigint);

CREATE OR REPLACE FUNCTION public.get_id_test_ethernet(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from test_ethernet where id = 
	(select id_test_ethernet from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_test_ethernet(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_test_hardware(bigint)

-- DROP FUNCTION public.get_id_test_hardware(bigint);

CREATE OR REPLACE FUNCTION public.get_id_test_hardware(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$
DECLARE
r bigint;
BEGIN
	
select id from test_hardware where id = 
	(select id_test_hardware from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;
$BODY$;

ALTER FUNCTION public.get_id_test_hardware(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_test_memory(bigint)

-- DROP FUNCTION public.get_id_test_memory(bigint);

CREATE OR REPLACE FUNCTION public.get_id_test_memory(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from test_memory where id = 
	(select id_test_memory from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_test_memory(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_test_sobol(bigint)

-- DROP FUNCTION public.get_id_test_sobol(bigint);

CREATE OR REPLACE FUNCTION public.get_id_test_sobol(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from test_sobol where id = 
	(select id_test_sobol from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_test_sobol(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_id_test_ssd(bigint)

-- DROP FUNCTION public.get_id_test_ssd(bigint);

CREATE OR REPLACE FUNCTION public.get_id_test_ssd(
	exit_control_id bigint)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
r bigint;
BEGIN
	
select id from test_ssd where id = 
	(select id_test_ssd from test_plan where id =
		(select id_test_plan from exit_control where id = exit_control_id))
into r;

Return r;
END;

$BODY$;

ALTER FUNCTION public.get_id_test_ssd(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_passport_platform(bigint)

-- DROP FUNCTION public.get_passport_platform(bigint);

CREATE OR REPLACE FUNCTION public.get_passport_platform(
	exit_control_id bigint)
RETURNS SETOF passport_platform 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$

BEGIN
RETURN QUERY
select * from passport_platform where name_platform = 
	(select name_platform_passport_platform from exit_control where id = exit_control_id);
END;

$BODY$;

ALTER FUNCTION public.get_passport_platform(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_standart_rows_in_smoke_tests(bigint)

-- DROP FUNCTION public.get_standart_rows_in_smoke_tests(bigint);

CREATE OR REPLACE FUNCTION public.get_standart_rows_in_smoke_tests(
	exit_control_id bigint)
RETURNS SETOF standart_test_rows 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$
-- UNION ALL
	-- select result,status,start_test,end_test,log from test_bios 
	--	where id = (select id_test_bios from get_test_plan(exit_control_id))
	
BEGIN
	RETURN QUERY (
	select result,status,start_test,end_test,log from test_cpu 
		where id = (select id_test_cpu from get_test_plan(exit_control_id))
	UNION ALL
	select result,status,start_test,end_test,log from test_ssd 
		where id = (select id_test_ssd from get_test_plan(exit_control_id))
	UNION ALL
	select result,status,start_test,end_test,log from test_sobol 
		where id = (select id_test_sobol from get_test_plan(exit_control_id))
	UNION ALL
	select result,status,start_test,end_test,log from test_ethernet 
		where id = (select id_test_ethernet from get_test_plan(exit_control_id))	
	UNION ALL
	select result,status,start_test,end_test,log from test_memory
		where id = (select id_test_memory from get_test_plan(exit_control_id))
	UNION ALL
	select result,status,start_test,end_test,log from test_hardware
		where id = (select id_test_hardware from get_test_plan(exit_control_id))
	UNION ALL
	select result,status,start_test,end_test,log from test_bios 
		where id = (select id_test_bios from get_test_plan(exit_control_id))
		);
END;

$BODY$;

ALTER FUNCTION public.get_standart_rows_in_smoke_tests(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_standart_rows_in_stress_tests(bigint)

-- DROP FUNCTION public.get_standart_rows_in_stress_tests(bigint);

CREATE OR REPLACE FUNCTION public.get_standart_rows_in_stress_tests(
	exit_control_id bigint)
RETURNS SETOF standart_test_rows 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$

BEGIN
	RETURN QUERY (
	select result,status,start_test,end_test,log from stress_test_cpu 
		where id = (select id_stress_test_cpu from get_test_plan(exit_control_id))
	UNION ALL
	select result,status,start_test,end_test,log from stress_test_ethernet 
		where id = (select id_stress_test_ethernet from get_test_plan(exit_control_id))
	UNION ALL
	select result,status,start_test,end_test,log from stress_test_sobol
		where id = (select id_stress_test_sobol from get_test_plan(exit_control_id))
		);
END;

$BODY$;

ALTER FUNCTION public.get_standart_rows_in_stress_tests(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_status_smoke_tests(bigint)

-- DROP FUNCTION public.get_status_smoke_tests(bigint);

CREATE OR REPLACE FUNCTION public.get_status_smoke_tests(
	exit_control_id bigint)
RETURNS SETOF bigint 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$

BEGIN
RETURN QUERY select * from
(select count(status) as count_status from get_standart_rows_in_smoke_tests(exit_control_id)
union all
select count(status) from get_standart_rows_in_smoke_tests(exit_control_id) where status = 'not run'
union all
select count(status) from get_standart_rows_in_smoke_tests(exit_control_id) where status = 'Finished') as foo;

END;

$BODY$;

ALTER FUNCTION public.get_status_smoke_tests(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_status_stress_tests(bigint)

-- DROP FUNCTION public.get_status_stress_tests(bigint);

CREATE OR REPLACE FUNCTION public.get_status_stress_tests(
	exit_control_id bigint)
RETURNS SETOF bigint 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$

BEGIN
RETURN QUERY select * from
(select count(status) as count_status from get_standart_rows_in_stress_tests(exit_control_id)
union all
select count(status) from get_standart_rows_in_stress_tests(exit_control_id) where status = 'not run'
union all
select count(status) from get_standart_rows_in_stress_tests(exit_control_id) where status = 'Finished') as foo;

END;

$BODY$;

ALTER FUNCTION public.get_status_stress_tests(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_status_tests(bigint)

-- DROP FUNCTION public.get_status_tests(bigint);

CREATE OR REPLACE FUNCTION public.get_status_tests(
	exit_control_id bigint)
RETURNS SETOF bigint 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$

BEGIN
RETURN QUERY select * from
(select count(status) as count_status from get_standart_rows_in_tests(exit_control_id)
union all
select count(status) from get_standart_rows_in_tests(exit_control_id) where status = 'not run'
union all
select count(status) from get_standart_rows_in_tests(exit_control_id) where status = 'done') as foo;

END;

$BODY$;

ALTER FUNCTION public.get_status_tests(bigint)
    OWNER TO postgres;
-- FUNCTION: public.get_test_plan(bigint)

-- DROP FUNCTION public.get_test_plan(bigint);

CREATE OR REPLACE FUNCTION public.get_test_plan(
	o_id bigint)
RETURNS SETOF test_plan 
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$

BEGIN
	RETURN QUERY
	select  id,
		id_test_cpu,
		id_test_ssd,
		id_test_sobol,
		id_test_ethernet,
		id_test_bios,
		id_stress_test_cpu,
		id_stress_test_ethernet,
		id_stress_test_memory,
		id_stress_test_sobol,
		id_test_memory,
		id_test_hardware
	from test_plan where id = (select id_test_plan from exit_control where id = o_id);
END;

$BODY$;

ALTER FUNCTION public.get_test_plan(bigint)
    OWNER TO postgres;
-- FUNCTION: public.new_exit_control(text, text)

-- DROP FUNCTION public.new_exit_control(text, text);

CREATE OR REPLACE FUNCTION public.new_exit_control(
	o_name_platform text,
	o_serial_number text)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	v_id_test_plan bigint;
	r bigint;
BEGIN
	select * into v_id_test_plan from new_test_plan();
	insert into exit_control(name_platform_passport_platform, id_test_plan, serial_number, acknowledge, start_exit, last_echo) values (o_name_platform, v_id_test_plan, o_serial_number, 'false', now(), now()) returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_exit_control(text, text)
    OWNER TO postgres;
-- FUNCTION: public.new_test_bios()

-- DROP FUNCTION public.new_test_bios();

CREATE OR REPLACE FUNCTION public.new_test_bios(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into test_bios(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_test_bios()
    OWNER TO postgres;
-- FUNCTION: public.new_test_cpu()

-- DROP FUNCTION public.new_test_cpu();

CREATE OR REPLACE FUNCTION public.new_test_cpu(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into test_cpu(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_test_cpu()
    OWNER TO postgres;
-- FUNCTION: public.new_test_disk()

-- DROP FUNCTION public.new_test_disk();

CREATE OR REPLACE FUNCTION public.new_test_disk(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into test_disk(plat_id) values (0) returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_test_disk()
    OWNER TO postgres;
-- FUNCTION: public.new_test_ethernet()

-- DROP FUNCTION public.new_test_ethernet();

CREATE OR REPLACE FUNCTION public.new_test_ethernet(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into test_ethernet(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_test_ethernet()
    OWNER TO postgres;
-- FUNCTION: public.new_test_hardware()

-- DROP FUNCTION public.new_test_hardware();

CREATE OR REPLACE FUNCTION public.new_test_hardware(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into test_hardware(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_test_hardware()
    OWNER TO postgres;
-- FUNCTION: public.new_test_memory()

-- DROP FUNCTION public.new_test_memory();

CREATE OR REPLACE FUNCTION public.new_test_memory(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into test_memory(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_test_memory()
    OWNER TO postgres;
-- FUNCTION: public.new_test_plan()

-- DROP FUNCTION public.new_test_plan();

CREATE OR REPLACE FUNCTION public.new_test_plan(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	v_id_test_cpu 			bigint;
	v_id_test_ethernet  		bigint;
	v_id_test_bios		  	bigint;
	v_id_test_sobol  		bigint;
	v_id_test_ssd  			bigint;
	v_id_test_memory		bigint;
	v_id_test_hardware		bigint;

	v_id_stress_test_cpu 		bigint;
	v_id_stress_test_ethernet 	bigint;
	v_id_stress_test_sobol		bigint;
	r bigint;
BEGIN
	select * into v_id_test_cpu 			from new_test_cpu();
	select * into v_id_test_ethernet 		from new_test_ethernet();
	select * into v_id_test_bios		 	from new_test_bios();
	select * into v_id_test_sobol 			from new_test_sobol();
	select * into v_id_test_ssd 			from new_test_ssd();
	select * into v_id_test_memory			from new_test_memory();
	select * into v_id_test_hardware		from new_test_hardware();

	select * into v_id_stress_test_cpu 		from stress_test_cpu();
	select * into v_id_stress_test_ethernet		from stress_test_ethernet();
	select * into v_id_stress_test_sobol		from stress_test_sobol();

	insert into test_plan (id_test_cpu,
			       id_test_ethernet,
			       id_test_bios,
			       id_test_sobol,
			       id_test_ssd,
			       id_test_memory,
			       id_test_hardware,				
			       id_stress_test_cpu,
			       id_stress_test_ethernet,
			       id_stress_test_sobol)

	VALUES		      (v_id_test_cpu,
			       v_id_test_ethernet,
			       v_id_test_bios,
			       v_id_test_sobol,
			       v_id_test_ssd,
			       v_id_test_memory,
			       v_id_test_hardware,
			       v_id_stress_test_cpu,
			       v_id_stress_test_ethernet,
			       v_id_stress_test_sobol)
	returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_test_plan()
    OWNER TO postgres;
-- FUNCTION: public.new_test_sobol()

-- DROP FUNCTION public.new_test_sobol();

CREATE OR REPLACE FUNCTION public.new_test_sobol(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into test_sobol(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_test_sobol()
    OWNER TO postgres;
-- FUNCTION: public.new_test_ssd()

-- DROP FUNCTION public.new_test_ssd();

CREATE OR REPLACE FUNCTION public.new_test_ssd(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into test_ssd(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.new_test_ssd()
    OWNER TO postgres;
-- FUNCTION: public.stress_test_cpu()

-- DROP FUNCTION public.stress_test_cpu();

CREATE OR REPLACE FUNCTION public.stress_test_cpu(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into stress_test_cpu(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.stress_test_cpu()
    OWNER TO postgres;
-- FUNCTION: public.stress_test_ethernet()

-- DROP FUNCTION public.stress_test_ethernet();

CREATE OR REPLACE FUNCTION public.stress_test_ethernet(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into stress_test_ethernet(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.stress_test_ethernet()
    OWNER TO postgres;
-- FUNCTION: public.stress_test_memory()

-- DROP FUNCTION public.stress_test_memory();

CREATE OR REPLACE FUNCTION public.stress_test_memory(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into stress_test_memory(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.stress_test_memory()
    OWNER TO postgres;
-- FUNCTION: public.stress_test_sobol()

-- DROP FUNCTION public.stress_test_sobol();

CREATE OR REPLACE FUNCTION public.stress_test_sobol(
	)
RETURNS bigint
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE 
AS $BODY$

DECLARE
	r bigint;
BEGIN
	insert into stress_test_sobol(status) values ('not run') returning id into r;
	RETURN r;
END;

$BODY$;

ALTER FUNCTION public.stress_test_sobol()
    OWNER TO postgres;

Источники

  1. «Код Безопасности» [Электронный ресурс]: Сертификаты АПКШ «Континент»/ Дата обращения: 11.05.2017. Режим доступа: URL: https://www.securitycode.ru/products/apksh_kontinent/sertificates/
  2. «Информзащита» [Электронный ресурс]: Системный интегратор/ Дата обращения: 11.05.2017. Режим доступа: URL: http://www.infosec.ru/about#sertificate

Ссылки

«Код Безопасности» [Электронный ресурс]: Официальный сайт АПКШ «Континент»/ Дата обращения: 11.05.2017. Режим доступа: URL: https://www.securitycode.ru