コード例 #1
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_remove_data(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    int err;

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("ABCDEFGHI");
    err = sol_buffer_append_slice(&buf, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("ABCDEFGHI"));
    ASSERT_STR_EQ(buf.data, "ABCDEFGHI");

    err = sol_buffer_remove_data(&buf, strlen("ABC"), 0);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("DEFGHI"));

    err = sol_buffer_remove_data(&buf, strlen("GHI"), 3);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("DEF"));

    err = sol_buffer_remove_data(&buf, strlen("DEF"), 0);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, 0);

    err = sol_buffer_remove_data(&buf, 100, 0);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, 0);

    err = sol_buffer_remove_data(&buf, 0, 100);
    ASSERT_INT_EQ(err, -EINVAL);

    sol_buffer_fini(&buf);
}
コード例 #2
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_append_from_base64(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    const char to_decode[] = "VGhpcyBpcyBhIG1lc3NhZ2UgdGhhdCBpcyBtdWx0aXBsZSBvZiAzIGNoYXJz";
    int err;

#define B64_DECODED "This is a message that is multiple of 3 chars"

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("XYZ");
    err = sol_buffer_append_slice(&buf, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("XYZ"));
    ASSERT_STR_EQ(buf.data, "XYZ");

    slice = sol_str_slice_from_str(to_decode);
    err = sol_buffer_append_from_base64(&buf, slice, SOL_BASE64_MAP);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("XYZ" B64_DECODED));
    ASSERT_STR_EQ(buf.data, "XYZ" B64_DECODED);

    sol_buffer_fini(&buf);

#undef B64_DECODED
}
コード例 #3
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_append_from_base16(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    const char to_decode[] = "546573742001090a0f2048656c6c6f";
    int err;

#define B16_DECODED "Test \x01\x09\x0a\x0f Hello"

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("XYZ");
    err = sol_buffer_append_slice(&buf, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("XYZ"));
    ASSERT_STR_EQ(buf.data, "XYZ");

    slice = sol_str_slice_from_str(to_decode);
    err = sol_buffer_append_from_base16(&buf, slice, SOL_DECODE_LOWERCASE);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("XYZ" B16_DECODED));
    ASSERT_STR_EQ(buf.data, "XYZ" B16_DECODED);

    sol_buffer_fini(&buf);

#undef B16_DECODED
}
コード例 #4
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_insert_as_base16(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    const char to_encode[] = "Test \x01\x09\x0a\x0f Hello";
    int err;

#define B16_ENCODED "546573742001090a0f2048656c6c6f"

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("World");
    err = sol_buffer_insert_slice(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("World"));
    ASSERT_STR_EQ(buf.data, "World");

    slice = sol_str_slice_from_str("Hello");
    err = sol_buffer_insert_slice(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("HelloWorld"));
    ASSERT_STR_EQ(buf.data, "HelloWorld");

    slice = sol_str_slice_from_str(to_encode);
    err = sol_buffer_insert_as_base16(&buf, strlen("Hello"), slice, false);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("Hello" B16_ENCODED "World"));
    ASSERT_STR_EQ(buf.data, "Hello" B16_ENCODED "World");

    sol_buffer_fini(&buf);

#undef B16_ENCODED
}
コード例 #5
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_insert_slice(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    int err;

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("World");
    err = sol_buffer_insert_slice(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("World"));
    ASSERT_STR_EQ(buf.data, "World");

    slice = sol_str_slice_from_str("Hello");
    err = sol_buffer_insert_slice(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("HelloWorld"));
    ASSERT_STR_EQ(buf.data, "HelloWorld");

    slice = sol_str_slice_from_str(" -*- ");
    err = sol_buffer_insert_slice(&buf, strlen("Hello"), slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("Hello -*- World"));
    ASSERT_STR_EQ(buf.data, "Hello -*- World");

    sol_buffer_fini(&buf);
}
コード例 #6
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_insert_as_base64(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    const char to_encode[] = "This is a message that is multiple of 3 chars";
    int err;

#define B64_ENCODED "VGhpcyBpcyBhIG1lc3NhZ2UgdGhhdCBpcyBtdWx0aXBsZSBvZiAzIGNoYXJz"

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("World");
    err = sol_buffer_insert_slice(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("World"));
    ASSERT_STR_EQ(buf.data, "World");

    slice = sol_str_slice_from_str("Hello");
    err = sol_buffer_insert_slice(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("HelloWorld"));
    ASSERT_STR_EQ(buf.data, "HelloWorld");

    slice = sol_str_slice_from_str(to_encode);
    err = sol_buffer_insert_as_base64(&buf, strlen("Hello"), slice, SOL_BASE64_MAP);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("Hello" B64_ENCODED "World"));
    ASSERT_STR_EQ(buf.data, "Hello" B64_ENCODED "World");

    sol_buffer_fini(&buf);

#undef B64_ENCODED
}
コード例 #7
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_set_slice(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    const char *str = "Hello";
    char *backend;
    int err;

    backend = strdup(str);
    slice = sol_str_slice_from_str(backend);

    sol_buffer_init(&buf);
    err = sol_buffer_set_slice(&buf, slice);
    ASSERT(err >= 0);

    ASSERT_INT_EQ(buf.used, strlen(backend));
    ASSERT_STR_EQ(buf.data, backend);

    backend[1] = 'a';
    ASSERT_STR_NE(buf.data, backend);
    ASSERT_STR_EQ(buf.data, str);

    sol_buffer_fini(&buf);

    free(backend);
}
コード例 #8
0
static void
test_copy_slice(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    const char *str = "Hello";
    char *backend;
    int err;

    backend = strdup(str);
    slice = sol_str_slice_from_str(backend);

    sol_buffer_init(&buf);
    err = sol_buffer_copy_slice(&buf, slice);
    ASSERT(err >= 0);

    ASSERT(buf.size >= strlen(backend) + 1);
    ASSERT(streq(buf.data, backend));

    backend[1] = 'a';
    ASSERT(!streq(buf.data, backend));
    ASSERT(streq(buf.data, str));

    sol_buffer_fini(&buf);

    free(backend);
}
コード例 #9
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
fini_null_is_fine(void)
{
    struct sol_buffer buf;

    sol_buffer_init(&buf);
    sol_buffer_fini(&buf);

    /* Finish an already finished buffer. */
    sol_buffer_fini(&buf);

    sol_buffer_fini(NULL);
}
コード例 #10
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_insert_from_base16(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    const char to_decode[] = "546573742001090a0f2048656c6c6f";
    int err;

#define B16_DECODED "Test \x01\x09\x0a\x0f Hello"

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("World");
    err = sol_buffer_insert_slice(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("World"));
    ASSERT_STR_EQ(buf.data, "World");

    slice = sol_str_slice_from_str("Hello");
    err = sol_buffer_insert_slice(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("HelloWorld"));
    ASSERT_STR_EQ(buf.data, "HelloWorld");

    slice = sol_str_slice_from_str(to_decode);
    err = sol_buffer_insert_from_base16(&buf, strlen("Hello"), slice,
        SOL_DECODE_LOWERCASE);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("Hello" B16_DECODED "World"));
    ASSERT_STR_EQ(buf.data, "Hello" B16_DECODED "World");

    slice = sol_str_slice_from_str("12x"); /* broken base16 */
    err = sol_buffer_insert_from_base16(&buf, strlen("Hello"), slice,
        SOL_DECODE_LOWERCASE);
    ASSERT_INT_NE(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("Hello" B16_DECODED "World"));
    ASSERT_STR_EQ(buf.data, "Hello" B16_DECODED "World");

    sol_buffer_fini(&buf);

#undef B16_DECODED
}
コード例 #11
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_insert_printf(void)
{
    struct sol_buffer buf;
    int err;

    sol_buffer_init(&buf);
    err = sol_buffer_insert_printf(&buf, 0, "'%s'", "This is a longer string, bla bla bla, bla bla bla");
    ASSERT_INT_EQ(err, 0);
    ASSERT_STR_EQ(buf.data, "'This is a longer string, bla bla bla, bla bla bla'");

    err = sol_buffer_insert_printf(&buf, 0, "[%03d]", 1);
    ASSERT_INT_EQ(err, 0);
    ASSERT_STR_EQ(buf.data, "[001]'This is a longer string, bla bla bla, bla bla bla'");

    err = sol_buffer_insert_printf(&buf, strlen("[001]"), " ### ");
    ASSERT_INT_EQ(err, 0);
    ASSERT_STR_EQ(buf.data, "[001] ### 'This is a longer string, bla bla bla, bla bla bla'");

    sol_buffer_fini(&buf);
}
コード例 #12
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_append_printf(void)
{
    struct sol_buffer buf;
    int err;

    sol_buffer_init(&buf);
    err = sol_buffer_append_printf(&buf, "[%03d]", 1);
    ASSERT_INT_EQ(err, 0);
    ASSERT_STR_EQ(buf.data, "[001]");

    err = sol_buffer_append_printf(&buf, "'%s'", "This is a longer string, bla bla bla, bla bla bla");
    ASSERT_INT_EQ(err, 0);
    ASSERT_STR_EQ(buf.data, "[001]'This is a longer string, bla bla bla, bla bla bla'");

    err = sol_buffer_append_printf(&buf, ".");
    ASSERT_INT_EQ(err, 0);
    ASSERT_STR_EQ(buf.data, "[001]'This is a longer string, bla bla bla, bla bla bla'.");

    sol_buffer_fini(&buf);
}
コード例 #13
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_append_slice(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    const char *str = "Hello";
    const char *expected_str = "HelloHello";
    char *backend;
    int err;

    backend = strdup(str);
    slice = sol_str_slice_from_str(backend);

    sol_buffer_init(&buf);
    err = sol_buffer_set_slice(&buf, slice);
    ASSERT(err >= 0);

    ASSERT_INT_EQ(buf.used, strlen(backend));
    ASSERT_STR_EQ(buf.data, backend);

    err = sol_buffer_append_slice(&buf, slice);
    ASSERT(err >= 0);
    ASSERT_INT_EQ(buf.used, strlen(expected_str));

    backend[1] = 'a';
    ASSERT_STR_NE(buf.data, backend);
    ASSERT_STR_EQ(buf.data, expected_str);

    slice = sol_buffer_get_slice(&buf);
    ASSERT_INT_EQ(slice.len, buf.used);
    ASSERT_STR_EQ(slice.data, buf.data);

    slice = sol_buffer_get_slice_at(&buf, 2);
    ASSERT_INT_EQ(slice.len, buf.used - 2);
    ASSERT_STR_EQ(slice.data, (char *)buf.data + 2);

    sol_buffer_fini(&buf);

    free(backend);
}
コード例 #14
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_set_char_at(void)
{
    struct sol_buffer buf;
    int err;

    sol_buffer_init(&buf);
    err = sol_buffer_set_char_at(&buf, 0, 'a');
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, 1);
    ASSERT_STR_EQ(buf.data, "a");

    err = sol_buffer_set_char_at(&buf, 0, 'b');
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, 1);
    ASSERT_STR_EQ(buf.data, "b");

    err = sol_buffer_set_char_at(&buf, 1, 'c');
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("bc"));
    ASSERT_STR_EQ(buf.data, "bc");

    err = sol_buffer_set_char_at(&buf, 0, 'a');
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("ac"));
    ASSERT_STR_EQ(buf.data, "ac");

    //growing
    err = sol_buffer_set_char_at(&buf, 2, 'd');
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("acd"));
    ASSERT_STR_EQ(buf.data, "acd");

    err = sol_buffer_set_char_at(&buf, 222, 'e');
    ASSERT_INT_EQ(err, -EINVAL);

    sol_buffer_fini(&buf);
}
コード例 #15
0
static void
on_digest_ready(void *data, struct sol_message_digest *handle, struct sol_blob *digest)
{
    struct feed_ctx *ctx = data;
    struct sol_buffer buf;
    int r;

    sol_buffer_init(&buf);
    r = sol_buffer_append_as_base16(&buf, sol_str_slice_from_blob(digest), false);
    if (r == 0) {
        printf("%s\t%s\n", (char *)buf.data, ctx->file);
    }

    sol_buffer_fini(&buf);

    print_time(ctx, ctx->done, "final");

    sol_message_digest_del(handle);
    free(ctx);

    pending--;
    if (pending == 0)
        sol_quit();
}
コード例 #16
0
ファイル: test-buffer.c プロジェクト: Achint08/soletta
static void
test_set_slice_at(void)
{
    struct sol_buffer buf;
    struct sol_str_slice slice;
    int err;

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("World");
    err = sol_buffer_set_slice_at(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("World"));
    ASSERT_STR_EQ(buf.data, "World");

    slice = sol_str_slice_from_str("Hello");
    err = sol_buffer_set_slice_at(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("Hello"));
    ASSERT_STR_EQ(buf.data, "Hello");

    slice = sol_str_slice_from_str("World");
    err = sol_buffer_set_slice_at(&buf, strlen("Hello"), slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("HelloWorld"));
    ASSERT_STR_EQ(buf.data, "HelloWorld");

    slice = sol_str_slice_from_str(" -*- ");
    err = sol_buffer_set_slice_at(&buf, 2, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("He -*- rld"));
    ASSERT_STR_EQ(buf.data, "He -*- rld");

    //overlapping
    slice = SOL_STR_SLICE_STR((char *)buf.data + 3, 3);
    err = sol_buffer_set_slice_at(&buf, 7, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("He -*- -*-"));
    ASSERT_STR_EQ(buf.data, "He -*- -*-");

    slice = sol_str_slice_from_str("whatever");
    err = sol_buffer_set_slice_at(&buf, 222, slice);
    ASSERT_INT_EQ(err, -EINVAL);

    sol_buffer_fini(&buf);

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("abcd");
    err = sol_buffer_set_slice(&buf, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("abcd"));
    ASSERT_STR_EQ(buf.data, "abcd");

    slice = sol_str_slice_from_str("XY");
    err = sol_buffer_set_slice_at(&buf, 4, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("abcdXY"));
    ASSERT_STR_EQ(buf.data, "abcdXY");
    sol_buffer_fini(&buf);

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("abcd");
    err = sol_buffer_set_slice(&buf, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("abcd"));
    ASSERT_STR_EQ(buf.data, "abcd");

    slice = sol_str_slice_from_str("XY");
    err = sol_buffer_set_slice_at(&buf, 3, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("abcXY"));
    ASSERT_STR_EQ(buf.data, "abcXY");
    sol_buffer_fini(&buf);

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("abcd");
    err = sol_buffer_set_slice(&buf, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("abcd"));
    ASSERT_STR_EQ(buf.data, "abcd");

    slice = sol_str_slice_from_str("XY");
    err = sol_buffer_set_slice_at(&buf, 2, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("abXY"));
    ASSERT_STR_EQ(buf.data, "abXY");
    sol_buffer_fini(&buf);

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("abcd");
    err = sol_buffer_set_slice(&buf, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("abcd"));
    ASSERT_STR_EQ(buf.data, "abcd");

    slice = sol_str_slice_from_str("XY");
    err = sol_buffer_set_slice_at(&buf, 1, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("aXYd"));
    ASSERT_STR_EQ(buf.data, "aXYd");
    sol_buffer_fini(&buf);

    sol_buffer_init(&buf);
    slice = sol_str_slice_from_str("abcd");
    err = sol_buffer_set_slice(&buf, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("abcd"));
    ASSERT_STR_EQ(buf.data, "abcd");

    slice = sol_str_slice_from_str("XY");
    err = sol_buffer_set_slice_at(&buf, 0, slice);
    ASSERT_INT_EQ(err, 0);
    ASSERT_INT_EQ(buf.used, strlen("XYcd"));
    ASSERT_STR_EQ(buf.data, "XYcd");
    sol_buffer_fini(&buf);
}