aboutsummaryrefslogtreecommitdiffstats
path: root/messagebus/src/tests/blob/blob.cpp
blob: 2afa21c81c86766b0d4a359b8cb592e9c728240a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/vespalib/testkit/testapp.h>
#include <vespa/messagebus/blob.h>
#include <vespa/messagebus/blobref.h>

using mbus::Blob;
using mbus::BlobRef;

TEST_SETUP(Test);

Blob makeBlob(const char *txt) {
    Blob b(strlen(txt) + 1);
    strcpy(b.data(), txt);
    return b;
}

BlobRef makeBlobRef(const Blob &b) {
    return BlobRef(b.data(), b.size());
}

Blob returnBlob(Blob b) {
    return b;
}

BlobRef returnBlobRef(BlobRef br) {
    return br;
}

int
Test::Main()
{
    TEST_INIT("blob_test");

    // create a blob
    Blob b = makeBlob("test");
    EXPECT_TRUE(b.size() == strlen("test") + 1);
    EXPECT_TRUE(strcmp("test", b.data()) == 0);

    // create a ref to a blob
    BlobRef br = makeBlobRef(b);
    EXPECT_TRUE(br.size() == strlen("test") + 1);
    EXPECT_TRUE(strcmp("test", br.data()) == 0);
    EXPECT_TRUE(b.data() == br.data());

    // non-destructive copy of ref
    BlobRef br2 = returnBlobRef(br);
    EXPECT_TRUE(br.size() == strlen("test") + 1);
    EXPECT_TRUE(strcmp("test", br.data()) == 0);
    EXPECT_TRUE(b.data() == br.data());
    EXPECT_TRUE(br2.size() == strlen("test") + 1);
    EXPECT_TRUE(strcmp("test", br2.data()) == 0);
    EXPECT_TRUE(b.data() == br2.data());

    br = br2;
    EXPECT_TRUE(br.size() == strlen("test") + 1);
    EXPECT_TRUE(strcmp("test", br.data()) == 0);
    EXPECT_TRUE(b.data() == br.data());
    EXPECT_TRUE(br2.size() == strlen("test") + 1);
    EXPECT_TRUE(strcmp("test", br2.data()) == 0);
    EXPECT_TRUE(b.data() == br2.data());

    // destructive copy of blob
    Blob b2 = returnBlob(std::move(b));
    EXPECT_EQUAL(0u, b.size());
    EXPECT_TRUE(b.data() == 0);
    EXPECT_TRUE(b2.size() == strlen("test") + 1);
    EXPECT_TRUE(strcmp("test", b2.data()) == 0);

    b.swap(b2);
    EXPECT_EQUAL(0u, b2.size());
    EXPECT_TRUE(b2.data() == 0);
    EXPECT_TRUE(b.size() == strlen("test") + 1);
    EXPECT_TRUE(strcmp("test", b.data()) == 0);

    TEST_DONE();
}