Beispiel #1
0
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
Beispiel #2
0
 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)
Beispiel #3
0
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'
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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)
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
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)
Beispiel #10
0
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
Beispiel #11
0
def test_FixedBytes():
    with pytest.raises(RuntimeError) as errobj:
        msgModule.buildFrom(bytestr=b'\x00\x00\x00')
        assert errobj == 'fixedBytes attribute too short'