From 92d165bdb7bc420a9a11d6db8a45a4c8751339ee Mon Sep 17 00:00:00 2001 From: Henrik Thostrup Jensen <htj@nordu.net> Date: Fri, 21 Sep 2018 15:50:53 +0200 Subject: [PATCH] add database check for start time < end time, and add test case for it --- datafiles/schema.sql | 6 ++++-- test/test_database.py | 50 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 test/test_database.py diff --git a/datafiles/schema.sql b/datafiles/schema.sql index 9ce1f579..f4d93869 100644 --- a/datafiles/schema.sql +++ b/datafiles/schema.sql @@ -46,7 +46,8 @@ CREATE TABLE service_connections ( bandwidth integer NOT NULL, -- mbps parameter parameter[], security_attributes security_attribute[], - connection_trace text[] + connection_trace text[], + CHECK ( start_time < end_time) ); -- internal references to connections that are part of a service connection @@ -98,7 +99,8 @@ CREATE TABLE generic_backend_connections ( directionality directionality NOT NULL, bandwidth integer NOT NULL, -- mbps parameter parameter[], - allocated boolean NOT NULL -- indicated if the resources are actually allocated + allocated boolean NOT NULL, -- indicated if the resources are actually allocated + CHECK ( start_time < end_time) ); diff --git a/test/test_database.py b/test/test_database.py new file mode 100644 index 00000000..229d4649 --- /dev/null +++ b/test/test_database.py @@ -0,0 +1,50 @@ +import datetime +import psycopg2 + +from twisted.internet import defer +from twisted.trial import unittest + +from opennsa import state +from opennsa.backends.common import genericbackend + +from . import db + + + +class DatabaseTest(unittest.TestCase): + + def setUp(self): + db.setupDatabase() + + + @defer.inlineCallbacks + def testReverseStartEndTimeConstraint(self): + + now = datetime.datetime.utcnow() + start_time = now - datetime.timedelta(seconds=10) + end_time = now - datetime.timedelta(seconds=1000) + + conn = genericbackend.GenericBackendConnections( + connection_id='conn-123', + revision=0, + global_reservation_id='gid-123', + description='test', + requester_nsa='req-nsa', + reserve_time=now, + reservation_state=state.RESERVE_START, + provision_state=state.RELEASED, + lifecycle_state=state.CREATED, + data_plane_active=False, + source_network='src-net', source_port='src-port', source_label=None, + dest_network='dst-net', dest_port='dst-port', dest_label=None, + start_time=start_time, end_time=end_time, + symmetrical=False, directionality='Bidirectional', bandwidth=200, + allocated=False + ) + + try: + yield conn.save() + self.fail('Should have gotten integrity error from database') + except psycopg2.IntegrityError as e: + pass # intended + -- GitLab