--- /dev/null
--- /dev/null
++/* libMemcached
++ * Copyright (C) 2010 Brian Aker
++ * All rights reserved.
++ *
++ * Use and distribution licensed under the BSD license. See
++ * the COPYING file in the parent directory for full text.
++ */
++
++#include "config.h"
++
++#include <gtest/gtest.h>
++
++#include <libmemcached/common.h>
++
++TEST(memcached_string_st, memcached_create_static)
++{
++ memcached_string_st string;
++ memcached_string_st *string_ptr;
++
++ memcached_st *memc= memcached_create(NULL);
++ string_ptr= memcached_string_create(memc, &string, 0);
++ ASSERT_TRUE(string.options.is_initialized);
++ ASSERT_TRUE(string_ptr);
++
++ /* The following two better be the same! */
++ ASSERT_FALSE(memcached_is_allocated(string_ptr));
++ ASSERT_FALSE(memcached_is_allocated(&string));
++ EXPECT_EQ(&string, string_ptr);
++
++ ASSERT_TRUE(string.options.is_initialized);
++ ASSERT_TRUE(memcached_is_initialized(&string));
++ memcached_string_free(&string);
++ ASSERT_FALSE(memcached_is_initialized(&string));
++
++ memcached_free(memc);
++}
++
++TEST(memcached_string_st, memcached_create_null)
++{
++ memcached_string_st *string;
++ memcached_st *memc= memcached_create(NULL);
++
++ string= memcached_string_create(memc, NULL, 0);
++ ASSERT_TRUE(string);
++ ASSERT_TRUE(memcached_is_allocated(string));
++ ASSERT_TRUE(memcached_is_initialized(string));
++ memcached_string_free(string);
++
++ memcached_free(memc);
++}
++
++TEST(memcached_string_st, string_alloc_with_size)
++{
++ memcached_string_st *string;
++ memcached_st *memc= memcached_create(NULL);
++
++ string= memcached_string_create(memc, NULL, 1024);
++ ASSERT_TRUE(string);
++ ASSERT_TRUE(memcached_is_allocated(string));
++ ASSERT_TRUE(memcached_is_initialized(string));
++ memcached_string_free(string);
++
++ memcached_free(memc);
++}
++
++TEST(memcached_string_st, string_alloc_with_size_toobig)
++{
++ memcached_st *memc= memcached_create(NULL);
++ memcached_string_st *string;
++
++ string= memcached_string_create(memc, NULL, SIZE_MAX);
++ ASSERT_FALSE(string);
++
++ memcached_free(memc);
++}
++
++TEST(memcached_string_st, string_alloc_append)
++{
++ char buffer[SMALL_STRING_LEN];
++ memcached_string_st *string;
++
++ memcached_st *memc= memcached_create(NULL);
++
++ /* Ring the bell! */
++ memset(buffer, 6, SMALL_STRING_LEN);
++
++ string= memcached_string_create(memc, NULL, 100);
++ ASSERT_TRUE(string);
++ ASSERT_TRUE(memcached_is_allocated(string));
++ ASSERT_TRUE(memcached_is_initialized(string));
++
++ for (uint32_t x= 0; x < 1024; x++)
++ {
++ memcached_return_t rc;
++ rc= memcached_string_append(string, buffer, SMALL_STRING_LEN);
++ EXPECT_EQ(rc, MEMCACHED_SUCCESS);
++ }
++ ASSERT_TRUE(memcached_is_allocated(string));
++ memcached_string_free(string);
++
++ memcached_free(memc);
++}
++
++TEST(memcached_string_st, string_alloc_append_toobig)
++{
++ memcached_return_t rc;
++ char buffer[SMALL_STRING_LEN];
++ memcached_string_st *string;
++
++ memcached_st *memc= memcached_create(NULL);
++
++ /* Ring the bell! */
++ memset(buffer, 6, SMALL_STRING_LEN);
++
++ string= memcached_string_create(memc, NULL, 100);
++ ASSERT_TRUE(string);
++ ASSERT_TRUE(memcached_is_allocated(string));
++ ASSERT_TRUE(memcached_is_initialized(string));
++
++ for (uint32_t x= 0; x < 1024; x++)
++ {
++ rc= memcached_string_append(string, buffer, SMALL_STRING_LEN);
++ EXPECT_EQ(rc, MEMCACHED_SUCCESS);
++ }
++ rc= memcached_string_append(string, buffer, SIZE_MAX);
++ EXPECT_EQ(rc, MEMCACHED_MEMORY_ALLOCATION_FAILURE);
++ ASSERT_TRUE(memcached_is_allocated(string));
++ memcached_string_free(string);
++
++ memcached_free(memc);
++}