diff --git a/datafiles/schema.sql b/datafiles/schema.sql index 9ce1f579d38dbf728dca8a10b1b3203d2a998d9c..f4d93869faa801721c6a3462815e3ec240bc70a5 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 0000000000000000000000000000000000000000..229d46494e2d86e579c12723c948a80893313ffd --- /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 +