def testDeconflictReservation(self): processedTime = datetimeAsIso8601(dt.now()) reservationRequest = reservationRequestWithConflicts() availabilityList = antennaAvailability() for antenna in reservationRequest['contactPlan']['antennas']: antennaId = antenna['id'] for contact in antenna['contacts']: for antenna in availabilityList['antennas']: if antenna['antennaId'] == antennaId : denied = False for window in antenna['outOfServiceWindows']: overlap = doWindowsOverlap(contact['startTime'], contact['stopTime'], window['startTime'], window['stopTime']) denied = denied or overlap contact['status'] = ('DENIED_OUT_OF_SERVICE' if denied else 'RESERVED') contact['processedTime'] = processedTime expectedStatusList = { 'SkySat-A-rev1006-Fairbanks-1' : 'DENIED_OUT_OF_SERVICE', 'SkySat-B-rev2209-Fairbanks-1' : 'RESERVED', 'SkySat-A-rev1006-Fairbanks-2' : 'RESERVED', 'SkySat-B-rev2209-Fairbanks-2' : 'DENIED_OUT_OF_SERVICE', } for antenna in reservationRequest['contactPlan']['antennas']: for contact in antenna['contacts']: # print "'%s\' : '%s'" % (contact['id'], contact['status']) self.assertEqual(contact['status'], expectedStatusList[contact['id']]) pass
def testDeconflictReservation(self): processedTime = datetimeAsIso8601(dt.now()) reservationRequest = reservationRequestWithConflicts() availabilityList = antennaAvailability() for antenna in reservationRequest['contactPlan']['antennas']: antennaId = antenna['id'] for contact in antenna['contacts']: for antenna in availabilityList['antennas']: if antenna['antennaId'] == antennaId: denied = False for window in antenna['outOfServiceWindows']: overlap = doWindowsOverlap(contact['startTime'], contact['stopTime'], window['startTime'], window['stopTime']) denied = denied or overlap contact['status'] = ('DENIED_OUT_OF_SERVICE' if denied else 'RESERVED') contact['processedTime'] = processedTime expectedStatusList = { 'SkySat-A-rev1006-Fairbanks-1': 'DENIED_OUT_OF_SERVICE', 'SkySat-B-rev2209-Fairbanks-1': 'RESERVED', 'SkySat-A-rev1006-Fairbanks-2': 'RESERVED', 'SkySat-B-rev2209-Fairbanks-2': 'DENIED_OUT_OF_SERVICE', } for antenna in reservationRequest['contactPlan']['antennas']: for contact in antenna['contacts']: # print "'%s\' : '%s'" % (contact['id'], contact['status']) self.assertEqual(contact['status'], expectedStatusList[contact['id']]) pass
def processReservation(requestJson, antennaAvailabilityList): processedTime = datetimeAsIso8601(dt.now()) reservationRequest = deepcopy(requestJson) deniedCount = 0 for antenna in reservationRequest['contactPlan']['antennas']: antennaId = antenna['id'] for contact in antenna['contacts']: for antenna in antennaAvailabilityList['antennas']: if antenna['antennaId'] == antennaId: denied = False for window in antenna['outOfServiceWindows']: overlap = doWindowsOverlap(contact['startTime'], contact['stopTime'], window['startTime'], window['stopTime']) denied = denied or overlap contact['status'] = ('DENIED_OUT_OF_SERVICE' if denied else 'RESERVED') contact['processedTime'] = processedTime if denied: deniedCount += 1 return (deniedCount, reservationRequest)
def testPostAntennaAvailability(self): from datetime import datetime as dt from TimeUtils import datetimeAsIso8601 data = antennaAvailability() data['generationDate'] = datetimeAsIso8601(dt.now()) requestHandler = RequestHandler() response = requestHandler.postAntennaAvailability(data) self.assertEqual(201, response.status)
def testValidateContactResponse(self): schema = loadSchemaFor("Contact") requiredList = schema['definitions']['Contact']['required'] requiredList.append("status") requiredList.append("processedTime") processedTime = datetimeAsIso8601(dt.now()) data = { "id": "SkySat-A-rev1006-Fairbanks-1", "satelliteName": "SkySat-1", "startTime": "2014-10-10T07:28:20.000Z", "stopTime": "2014-10-10T07:29:20.000Z", "status": "RESERVED", "processedTime": processedTime } validateWithChecker(data, schema)
def testValidateContactResponse(self): schema = loadSchemaFor("Contact") requiredList = schema['definitions']['Contact']['required'] requiredList.append("status") requiredList.append("processedTime") processedTime = datetimeAsIso8601(dt.now()) data = { "id":"SkySat-A-rev1006-Fairbanks-1", "satelliteName":"SkySat-1", "startTime": "2014-10-10T07:28:20.000Z", "stopTime": "2014-10-10T07:29:20.000Z", "status" : "RESERVED", "processedTime" : processedTime } validateWithChecker(data, schema)
def testReservationWorkflow(self): # - Set Antenna Availabilty: this is testing step only from datetime import datetime as dt from TimeUtils import datetimeAsIso8601 data = antennaAvailability() data['generationDate'] = datetimeAsIso8601(dt.now()) requestHandler = RequestHandler() response = requestHandler.postAntennaAvailability(data) self.assertEqual(201, response.status) startDate = '2015-10-16T10:00:00Z' endDate = '2015-10-17T10:00:00Z' response = requestHandler.getAntennaAvailability(startDate, endDate) self.assertEqual(200, response.status) self.assertEqual('OK', response.reason) # - Get Antenna Availabilty: this begins every reservation cycle startDate = '2015-10-16T10:00:00Z' endDate = '2015-10-17T10:00:00Z' response = requestHandler.getAntennaAvailability(startDate, endDate) # TODO capture generation date from availability report self.assertEqual(200, response.status) self.assertEqual('OK', response.reason) responseSchema = loadAntennaAvailabilitySchema() validateWithChecker(response.body, responseSchema) # - Update (POST) reservations. data = reservationRequest() # TODO consider: do we inject the date form our antenna avail report at this point? Or let service do that # TODO update generation date in reservation request before posting requestHandler = RequestHandler() response = requestHandler.postReservations(data) self.assertEqual(201, response.status) self.assertEqual('Created', response.reason) # TODO assert expected generation date in response responseSchema = loadReservationResponseSchema() validateWithChecker(response.body, responseSchema)
def processReservation(requestJson, antennaAvailabilityList): processedTime = datetimeAsIso8601(dt.now()) reservationRequest = deepcopy(requestJson) deniedCount = 0 for antenna in reservationRequest['contactPlan']['antennas']: antennaId = antenna['id'] for contact in antenna['contacts']: for antenna in antennaAvailabilityList['antennas']: if antenna['antennaId'] == antennaId : denied = False for window in antenna['outOfServiceWindows']: overlap = doWindowsOverlap(contact['startTime'], contact['stopTime'], window['startTime'], window['stopTime']) denied = denied or overlap contact['status'] = ('DENIED_OUT_OF_SERVICE' if denied else 'RESERVED') contact['processedTime'] = processedTime if denied: deniedCount +=1 return (deniedCount, reservationRequest)
def testDatetimeFromIso8601(self): startDate = dt(2015, 10, 13, 13, 10, 0) isoString = datetimeAsIso8601(startDate) convertedDate = iso8601AsDatetime(isoString) self.assertEqual(startDate, convertedDate)
def testNow(self): isoString = datetimeAsIso8601(dt.now()) print isoString