コード例 #1
0
ファイル: map-test.c プロジェクト: gillsoft/minimalt
int main() {
  {
    struct map map;

    map_init(&map);

    char key1[] = "This is a really long key.",
         key2[] = "Another key.";

    assertError("map_set (1)", map_set(&map, key1, sizeof key1, (void*)123));
    assertEq("Key is now retrievable", map_get(&map, key1, sizeof key1), (void*)123);

    assertError("map_set (2)", map_set(&map, key2, sizeof key2, (void*)456));
    assertEq("New key is now retrievable", map_get(&map, key2, sizeof key2), (void*)456);
    assertEq("Old key is still retrievable (1)", map_get(&map, key1, sizeof key1), (void*)123);

    assertError("map_set existing", map_set(&map, key1, sizeof key1, (void*)789));
    assertEq("Key has updated value", map_get(&map, key1, sizeof key1), (void*)789);
    assertEq("Old key is still retrievable (2)", map_get(&map, key2, sizeof key2), (void*)456);

    assertError("map_set small key (1)", map_set(&map, (void*)1, 0, (void*)10));
    assertError("map_set small key (2)", map_set(&map, (void*)2, 0, (void*)20));
    assertEq("Can retrieve short key (1)", map_get(&map, (void*)1, 0), (void*)10);
    assertEq("Can retrieve short key (2)", map_get(&map, (void*)2, 0), (void*)20);

    map_free(&map);
  }
}
コード例 #2
0
ファイル: ZeroMQSocketTests.cpp プロジェクト: mworks/mworks
void ZeroMQSocketTests::testBasicSendReceive() {
    const std::string endpoint("tcp://127.0.0.1:19992");
    const std::string outgoingMessage("Hello, world!");
    ZeroMQSocket::Message incomingMessage;
    
    ZeroMQSocket sender(ZMQ_PUSH);
    CPPUNIT_ASSERT( sender.setOption(ZMQ_IMMEDIATE, 1) );
    
    ZeroMQSocket receiver(ZMQ_PULL);
    
    // Send failure
    CPPUNIT_ASSERT( ZeroMQSocket::Result::error == receiver.send(outgoingMessage.data(), outgoingMessage.size()) );
    assertError("ERROR: Cannot send on ZeroMQ socket: Operation not supported");
    
    // Receive failure
    CPPUNIT_ASSERT( ZeroMQSocket::Result::error == incomingMessage.recv(sender) );
    assertError("ERROR: Cannot receive on ZeroMQ socket: Operation not supported");
    
    // Send timeout
    CPPUNIT_ASSERT( ZeroMQSocket::Result::timeout == sender.send(outgoingMessage.data(),
                                                                 outgoingMessage.size(),
                                                                 ZMQ_DONTWAIT) );  // Flag
    CPPUNIT_ASSERT( sender.setOption(ZMQ_SNDTIMEO, 100) );  // Option
    CPPUNIT_ASSERT( sender.connect(endpoint) );
    CPPUNIT_ASSERT( ZeroMQSocket::Result::timeout == sender.send(outgoingMessage.data(), outgoingMessage.size()) );
    
    // Receive timeout
    CPPUNIT_ASSERT( ZeroMQSocket::Result::timeout == incomingMessage.recv(receiver, ZMQ_DONTWAIT) );  // Flag
    CPPUNIT_ASSERT( receiver.setOption(ZMQ_RCVTIMEO, 100) );  // Option
    CPPUNIT_ASSERT( receiver.bind(endpoint) );
    CPPUNIT_ASSERT( ZeroMQSocket::Result::timeout == incomingMessage.recv(receiver) );
    
    // Success
    CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == sender.send(outgoingMessage.data(), outgoingMessage.size()) );
    CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == incomingMessage.recv(receiver) );
    CPPUNIT_ASSERT_EQUAL( outgoingMessage, std::string(static_cast<const char *>(incomingMessage.getData()),
                                                       incomingMessage.getSize()) );
    
    CPPUNIT_ASSERT( sender.disconnect(endpoint) );
    CPPUNIT_ASSERT( receiver.unbind(endpoint) );
}
コード例 #3
0
ファイル: ZeroMQSocketTests.cpp プロジェクト: mworks/mworks
void ZeroMQSocketTests::testUnbindFailure() {
    ZeroMQSocket s(ZMQ_PUB);
    CPPUNIT_ASSERT( !s.unbind("pct://*:*") );
    assertError("ERROR: Cannot unbind ZeroMQ socket: Protocol not supported");
}
コード例 #4
0
ファイル: ZeroMQSocketTests.cpp プロジェクト: mworks/mworks
void ZeroMQSocketTests::testDisconnectFailure() {
    ZeroMQSocket s(ZMQ_SUB);
    CPPUNIT_ASSERT( !s.disconnect("pct://*:*") );
    assertError("ERROR: Cannot disconnect ZeroMQ socket: Protocol not supported");
}
コード例 #5
0
ファイル: ZeroMQSocketTests.cpp プロジェクト: mworks/mworks
void ZeroMQSocketTests::testSetOptionFailure() {
    ZeroMQSocket s(ZMQ_PAIR);
    CPPUNIT_ASSERT( !s.setOption(123456, 0) );
    assertError("ERROR: Cannot set option on ZeroMQ socket: Invalid argument");
}
コード例 #6
0
ファイル: ZeroMQSocketTests.cpp プロジェクト: mworks/mworks
void ZeroMQSocketTests::testEventSendReceive() {
    const std::string endpoint("tcp://127.0.0.1:19992");
    const boost::endian::big_uint16_t eventCode = 512;
    const MWTime eventTime = 1234567890;
    const Datum eventData(Datum::list_value_type { Datum(true), Datum(2.5), Datum("foo") });
    const auto outgoingEvent = boost::make_shared<Event>(eventCode, eventTime, eventData);
    boost::shared_ptr<Event> incomingEvent;
    
    ZeroMQSocket sender(ZMQ_PUSH);
    CPPUNIT_ASSERT( sender.setOption(ZMQ_IMMEDIATE, 1) );
    CPPUNIT_ASSERT( sender.setOption(ZMQ_SNDTIMEO, 100) );
    
    ZeroMQSocket receiver(ZMQ_PULL);
    CPPUNIT_ASSERT( receiver.setOption(ZMQ_RCVTIMEO, 100) );
    
    // Send failure
    CPPUNIT_ASSERT( ZeroMQSocket::Result::error == receiver.send(outgoingEvent) );
    assertError("ERROR: Cannot send on ZeroMQ socket: Operation not supported");
    
    // Receive failure
    CPPUNIT_ASSERT( ZeroMQSocket::Result::error == sender.recv(incomingEvent) );
    assertError("ERROR: Cannot receive on ZeroMQ socket: Operation not supported");
    
    // Send timeout
    CPPUNIT_ASSERT( sender.connect(endpoint) );
    CPPUNIT_ASSERT( ZeroMQSocket::Result::timeout == sender.send(outgoingEvent) );
    
    // Receive timeout
    CPPUNIT_ASSERT( receiver.bind(endpoint) );
    CPPUNIT_ASSERT( ZeroMQSocket::Result::timeout == receiver.recv(incomingEvent) );
    
    // Negative event code
    CPPUNIT_ASSERT( ZeroMQSocket::Result::error == sender.send(boost::make_shared<Event>(-1, eventTime, eventData)) );
    assertError("ERROR: Cannot send event: event code (-1) is out of range");
    
    // Out-of-bounds event code
    CPPUNIT_ASSERT( ZeroMQSocket::Result::error == sender.send(boost::make_shared<Event>(int(std::numeric_limits<std::uint16_t>::max()) + 1,
                                                                                         eventTime,
                                                                                         eventData)) );
    assertError("ERROR: Cannot send event: event code (65536) is out of range");
    
    // Wrong header size
    CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == sender.send(&eventTime, sizeof(eventTime)) );
    CPPUNIT_ASSERT( ZeroMQSocket::Result::error == receiver.recv(incomingEvent) );
    assertError("ERROR: Received invalid event: header has wrong size (expected 2 bytes, got 8 bytes)");
    
    // No body
    CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == sender.send(&eventCode, sizeof(eventCode)) );
    CPPUNIT_ASSERT( ZeroMQSocket::Result::error == receiver.recv(incomingEvent) );
    assertError("ERROR: Received invalid event: body is missing");
    
    // Invalid body
    CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == sender.send(&eventCode, sizeof(eventCode), ZMQ_SNDMORE) );
    {
        std::ostringstream buffer;
        msgpack::pack(buffer, eventTime);
        msgpack::pack(buffer, eventData);
        auto data = buffer.str();
        CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == sender.send(data.data(), data.size() - 1) );  // Not enough data
    }
    CPPUNIT_ASSERT( ZeroMQSocket::Result::error == receiver.recv(incomingEvent) );
    assertError("ERROR: Received invalid event: body is invalid or corrupt");
    
    // Success
    CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == sender.send(outgoingEvent) );
    incomingEvent.reset();
    CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == receiver.recv(incomingEvent) );
    CPPUNIT_ASSERT_EQUAL( int(eventCode), incomingEvent->getEventCode() );
    CPPUNIT_ASSERT_EQUAL( eventTime, incomingEvent->getTime() );
    CPPUNIT_ASSERT( eventData == incomingEvent->getData() );
    
    // Extra data
    CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == sender.send(&eventCode, sizeof(eventCode), ZMQ_SNDMORE) );
    {
        std::ostringstream buffer;
        msgpack::pack(buffer, eventTime);
        msgpack::pack(buffer, eventData);
        msgpack::pack(buffer, 512);
        auto data = buffer.str();
        CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == sender.send(data.data(), data.size()) );
    }
    incomingEvent.reset();
    CPPUNIT_ASSERT( ZeroMQSocket::Result::ok == receiver.recv(incomingEvent) );
    assertMessage(M_WARNING_MESSAGE, "WARNING: Received event body contains 3 bytes of extra data that will be ignored");
    CPPUNIT_ASSERT_EQUAL( int(eventCode), incomingEvent->getEventCode() );
    CPPUNIT_ASSERT_EQUAL( eventTime, incomingEvent->getTime() );
    CPPUNIT_ASSERT( eventData == incomingEvent->getData() );
    
    CPPUNIT_ASSERT( sender.disconnect(endpoint) );
    CPPUNIT_ASSERT( receiver.unbind(endpoint) );
}
コード例 #7
0
void EEPROMMemoryAdapter::write(uint32_t address, uint8_t* data, size_t length) {
	if (assertAddress(address, length))
		assertError(memory.writeBytes(address, data, length));
}
コード例 #8
0
void EEPROMMemoryAdapter::read(uint32_t address, uint8_t* data, size_t length) {
	if (assertAddress(address, length))
		assertError(memory.readBytes(address, data, length));
	else
		memset(data, 0, length); // Daten mit 0 befüllen, damit der Leser bei Fehlern keine zufällige Werte bekommt
}
コード例 #9
0
void EEPROMMemoryAdapter::writeByte(uint32_t address, uint8_t val) {
	if (assertAddress(address, sizeof(uint8_t)))
		assertError(memory.writeByte(address, val));
}