# Copyright 2016 The Chromium Authors. All rights reserved. # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Local unittest for legion.lib.comm_server.""" import httplib # pylint: disable=relative-import import legion_unittest from legion.lib.comm_server import comm_server class CommServerTest(legion_unittest.TestCase): def setUp(self): super(CommServerTest, self).setUp() self.server = comm_server.CommServer() self.server.start() def tearDown(self): try: self.server.shutdown() finally: super(CommServerTest, self).tearDown() def Connect(self, verb, path, message=''): conn = httplib.HTTPConnection('localhost', self.server.port) conn.request(verb, path, body=message) return conn.getresponse() def testMessagesUsedAsSignals(self): self.assertEquals( self.Connect('GET', '/messages/message1').status, 404) self.assertEquals( self.Connect('PUT', '/messages/message1').status, 200) self.assertEquals( self.Connect('GET', '/messages/message1').status, 200) self.assertEquals( self.Connect('DELETE', '/messages/message1').status, 200) self.assertEquals( self.Connect('DELETE', '/messages/message1').status, 404) self.assertEquals( self.Connect('GET', '/messages/message1').status, 404) def testErrors(self): for verb in ['GET', 'PUT', 'DELETE']: self.assertEquals( self.Connect(verb, '/').status, 403) self.assertEquals( self.Connect(verb, '/foobar').status, 403) self.assertEquals( self.Connect(verb, '/foobar/').status, 405) def testMessagePassing(self): self.assertEquals( self.Connect('GET', '/messages/message2').status, 404) self.assertEquals( self.Connect('PUT', '/messages/message2', 'foo').status, 200) self.assertEquals( self.Connect('GET', '/messages/message2').read(), 'foo') self.assertEquals( self.Connect('DELETE', '/messages/message2').status, 200) self.assertEquals( self.Connect('DELETE', '/messages/message2').status, 404) self.assertEquals( self.Connect('GET', '/messages/message2').status, 404) if __name__ == '__main__': legion_unittest.main()