def test_contentFormat(): '''Read content format in PUT request from bytes, and reserialize''' msg = msgModule.buildFrom(textContentPutMsg) assert len(msg.options) == 2 assert msg.options[0].type == coap.OptionType.UriPath assert msg.options[1].type == coap.OptionType.ContentFormat assert msg.options[1].value == coap.MediaType.TextPlain assert msgModule.serialize(msg) == textContentPutMsg
def handle_read(self): data, addr = self.socket.recvfrom(SOCKET_BUFSIZE) if log.isEnabledFor(logging.DEBUG): bytestr = bytearray(data) if sys.version_info.major == 2 else data hexstr = ' '.join(['{:02x}'.format(b) for b in bytestr]) log.debug('Receive message from {0}; data (hex) {1}'.format(addr, hexstr)) else: log.info('Receive message from {0}'.format(addr)) coapmsg = msgModule.buildFrom(address=addr, bytestr=data) self._receiveHook.trigger(coapmsg)
def test_PayloadFormat(): '''Reads payload based on Content-Format option''' msg = msgModule.buildFrom(textContentPutMsg) assert len(msg.options) == 2 optList = msg.findOption(coap.OptionType.ContentFormat) assert len(optList) == 1 assert optList[0].type == coap.OptionType.ContentFormat assert msg.typedPayload() == '2014,125'
def test_binaryContentFormat(): '''Read binary content format in PUT request from bytes, and reserialize''' msg = msgModule.buildFrom(binaryContentPutMsg) assert len(msg.options) == 2 assert msg.options[0].type == coap.OptionType.UriPath assert msg.options[1].type == coap.OptionType.ContentFormat assert msg.options[1].value == coap.MediaType.OctetStream assert msg.payload == b'\x33' assert msgModule.serialize(msg) == binaryContentPutMsg
def test_jsonContentFormat(): '''Read JSON content format in POST request from bytes, and reserialize''' msg = msgModule.buildFrom(jsonContentPostMsg) assert len(msg.options) == 2 assert msg.options[0].type == coap.OptionType.UriPath assert msg.options[1].type == coap.OptionType.ContentFormat assert msg.options[1].value == coap.MediaType.Json payload = msg.jsonPayload() assert 'v' in payload assert payload['v'] == -69 assert msgModule.serialize(msg) == jsonContentPostMsg
def test_postResource(): '''Tests handling an incoming NON POST request.''' mockMsgSocket = flexmock( registerForReceive = lambda handler: None, create_socket = lambda family,type: None, bind = lambda addr: None) mockMsgSocket.should_receive('send').with_args(PostMessageMatcher()).times(1) # Run # Must import server module here -- after definition of mock MessageSocket from soscoap import server as srvModule server = srvModule.CoapServer(mockMsgSocket) server.registerForResourcePost(postTestResource) msg = msgModule.buildFrom(b'\x50\x02\xd0\x07\xb4\x70\x69\x6e\x67\xff\x32\x30\x31\x34\x2c\x31\x32\x35', address=('::1', 42683, 0, 0)) server._handleMessage(msg)
def test_simplePut(): '''Read PUT request from bytes, and reserialize''' msg = msgModule.buildFrom(pingPutMsg) assert msg.version == 1 assert msg.messageType == coap.MessageType.NON assert msg.tokenLength == 0 assert msg.codeClass == coap.CodeClass.Request assert msg.codeDetail == coap.RequestCode.PUT assert msg.messageId == 791 # 0x0317 assert msg.token == None assert len(msg.options) == 1 assert msg.options[0].value == 'ping' assert msg.payload == b'2014,125' assert msgModule.serialize(msg) == pingPutMsg
def test_simpleGet(): '''Read GET request from bytes, and reserialize''' msg = msgModule.buildFrom(verGetMsg) assert msg.version == 1 assert msg.messageType == coap.MessageType.CON assert msg.tokenLength == 0 assert msg.codeClass == coap.CodeClass.Request assert msg.codeDetail == coap.RequestCode.GET assert msg.messageId == 27689 # 0x6C29 assert msg.token == None assert len(msg.options) == 1 assert msg.options[0].value == 'ver' assert msg.absolutePath() == '/ver' assert msgModule.serialize(msg) == verGetMsg
def test_getError(): '''Tests generation of an error reply for an incoming CON GET request.''' mockMsgSocket = flexmock( registerForReceive = lambda handler: None, create_socket = lambda family,type: None, bind = lambda addr: None) mockMsgSocket.should_receive('send').with_args(ErrorMessageMatcher()).times(1) # Run # Must import server module here -- after definition of mock MessageSocket from soscoap import server as srvModule server = srvModule.CoapServer(mockMsgSocket) server.registerForResourceGet(getErrorResource) msg = msgModule.buildFrom(b'\x40\x01\x6C\x29\xB3\x76\x65\x72', address=('::1', 42683, 0, 0)) server._handleMessage(msg)
def test_token(): '''Read token in GET request from bytes, and reserialize''' msg = msgModule.buildFrom(tokenMsg) assert msg.token == b'\x66' assert msgModule.serialize(msg) == tokenMsg
def test_FixedBytes(): with pytest.raises(RuntimeError) as errobj: msgModule.buildFrom(bytestr=b'\x00\x00\x00') assert errobj == 'fixedBytes attribute too short'