blob: 80f7ac3896c27a5d915bff0c5153568e67347177 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define ROOT_NAME "testDataOutput"
#include "fw_helper.hpp"
#include <gfcpp/DataOutput.hpp>
#include <gfcpp/DataInput.hpp>
using namespace apache::geode::client;
using namespace test;
void dumpnbytes(const uint8_t* buf, uint32_t length) {
for (uint32_t i = 0; i < length; i++) {
cout << "buf[" << i << "] = " << hex << static_cast<int16_t>(buf[i]) << dec
<< " " << static_cast<char>(buf[i]) << endl;
}
}
void dumpnshorts(const uint16_t* buf, uint32_t length) {
for (uint32_t i = 0; i < length; i++) {
cout << "buf[" << i << "] = " << hex << static_cast<uint16_t>(buf[i]) << dec
<< endl;
}
}
void dumpnwords(const uint32_t* buf, uint32_t length) {
for (uint32_t i = 0; i < length; i++) {
cout << "buf[" << i << "] = " << hex << static_cast<uint32_t>(buf[i]) << dec
<< endl;
}
}
BEGIN_TEST(Byte)
{
DataOutput dataOutput;
dataOutput.write(static_cast<uint8_t>(0x11));
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT(buffer[0] == (uint8_t)0x11, "expected 0x11.");
int8_t result;
DataInput dataInput(buffer, dataOutput.getBufferLength());
dataInput.read(&result);
ASSERT(result == (uint8_t)0x11, "expected 0x11");
}
END_TEST(Byte)
BEGIN_TEST(Boolean)
{
DataOutput dataOutput;
dataOutput.writeBoolean(true);
dataOutput.writeBoolean(false);
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT(buffer[0] == (uint8_t)0x1, "expected 0x1.");
ASSERT(buffer[1] == (uint8_t)0x0, "expected 0x0.");
bool result;
DataInput dataInput(buffer, dataOutput.getBufferLength());
dataInput.readBoolean(&result);
ASSERT(result, "expected true");
dataInput.readBoolean(&result);
ASSERT(result == false, "expected false");
}
END_TEST(Boolean)
BEGIN_TEST(Short)
{
DataOutput dataOutput;
dataOutput.writeInt(static_cast<int16_t>(0x1122));
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT(buffer[0] == (uint8_t)0x11, "expected 0x11.");
ASSERT(buffer[1] == (uint8_t)0x22, "expected 0x11.");
int16_t result;
DataInput dataInput(buffer, dataOutput.getBufferLength());
dataInput.readInt(&result);
ASSERT(result == 0x1122, "expected 0x1122");
}
END_TEST(Short)
BEGIN_TEST(int_t)
{
DataOutput dataOutput;
dataOutput.writeInt((int32_t)0x11223344);
const uint8_t* buffer = dataOutput.getBuffer();
dumpnbytes(buffer, 4);
ASSERT(buffer[0] == (uint8_t)0x11, "expected 0x11.");
ASSERT(buffer[1] == (uint8_t)0x22, "expected 0x22.");
ASSERT(buffer[2] == (uint8_t)0x33, "expected 0x33.");
ASSERT(buffer[3] == (uint8_t)0x44, "expected 0x44.");
DataInput dataInput(buffer, dataOutput.getBufferLength());
int32_t result;
dataInput.readInt(&result);
ASSERT(result == 0x11223344, "expected 0x11223344");
}
END_TEST(int_t)
BEGIN_TEST(Long)
{
DataOutput dataOutput;
int64_t value = ((static_cast<int64_t>(0x11223344)) << 32) | 0x55667788;
dataOutput.writeInt(value);
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT(buffer[0] == (uint8_t)0x11, "expected 0x11.");
ASSERT(buffer[1] == (uint8_t)0x22, "expected 0x22.");
ASSERT(buffer[2] == (uint8_t)0x33, "expected 0x33.");
ASSERT(buffer[3] == (uint8_t)0x44, "expected 0x44.");
ASSERT(buffer[4] == (uint8_t)0x55, "expected 0x55.");
ASSERT(buffer[5] == (uint8_t)0x66, "expected 0x66.");
ASSERT(buffer[6] == (uint8_t)0x77, "expected 0x77.");
ASSERT(buffer[7] == (uint8_t)0x88, "expected 0x88.");
DataInput dataInput(buffer, dataOutput.getBufferLength());
int64_t result;
dataInput.readInt(&result);
ASSERT(result == value, "expected 0x1122334455667788");
}
END_TEST(Long)
BEGIN_TEST(Float)
{
DataOutput dataOutput;
dataOutput.writeFloat(1.2f);
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT(buffer[0] == (uint8_t)0x3f, "expected 0x3f.");
ASSERT(buffer[1] == (uint8_t)0x99, "expected 0x99.");
ASSERT(buffer[2] == (uint8_t)0x99, "expected 0x99.");
ASSERT(buffer[3] == (uint8_t)0x9a, "expected 0x9a.");
DataInput dataInput(buffer, dataOutput.getBufferLength());
float result;
dataInput.readFloat(&result);
ASSERT(result == 1.2f, "expected 1.2f");
}
END_TEST(Float)
BEGIN_TEST(Double)
{
DataOutput dataOutput;
dataOutput.writeDouble(1.2);
const uint8_t* buffer = dataOutput.getBuffer();
ASSERT(buffer[0] == (uint8_t)0x3f, "expected 0x3f.");
ASSERT(buffer[1] == (uint8_t)0xf3, "expected 0xf3.");
ASSERT(buffer[2] == (uint8_t)0x33, "expected 0x33.");
ASSERT(buffer[3] == (uint8_t)0x33, "expected 0x33.");
ASSERT(buffer[4] == (uint8_t)0x33, "expected 0x33.");
ASSERT(buffer[5] == (uint8_t)0x33, "expected 0x33.");
ASSERT(buffer[6] == (uint8_t)0x33, "expected 0x33.");
ASSERT(buffer[7] == (uint8_t)0x33, "expected 0x33.");
DataInput dataInput(buffer, dataOutput.getBufferLength());
double result;
dataInput.readDouble(&result);
ASSERT(result == 1.2, "expected 1.2");
}
END_TEST(Double)
// Test data output numbers.
BEGIN_TEST(Numbers)
{
DataOutput dataOutput;
dataOutput.write(static_cast<uint8_t>(0x11));
dataOutput.write(static_cast<uint8_t>(0xAA));
dataOutput.writeInt(static_cast<int16_t>(0x1122));
dataOutput.write(static_cast<uint8_t>(0xAA));
dataOutput.writeInt(0x11223344);
dataOutput.write(static_cast<uint8_t>(0xAA));
dataOutput.writeInt(((static_cast<int64_t>(0x11223344)) << 32) |
0x55667788);
dataOutput.write(static_cast<uint8_t>(0xAA));
dataOutput.writeFloat(1.2f);
dataOutput.write(static_cast<uint8_t>(0xAA));
dataOutput.writeDouble(1.2);
dataOutput.write(static_cast<uint8_t>(0xAA));
// test data
}
END_TEST(Numbers)
BEGIN_TEST(NarrowStrings)
{
DataOutput dataOutput;
const char* strOrig = "This is fun.";
dataOutput.writeASCII(strOrig);
const uint8_t* buffer = dataOutput.getBuffer();
cout << "Wrote to buffer..." << endl;
dumpnbytes(buffer, 14);
ASSERT(buffer[0] == 0x00, "wrong utf encoding.");
ASSERT(buffer[1] == 0x0c, "wrong utf encoding.");
ASSERT(buffer[2] == 'T', "wrong utf encoding.");
ASSERT(buffer[3] == 'h', "wrong utf encoding.");
ASSERT(buffer[4] == 'i', "wrong utf encoding.");
ASSERT(buffer[5] == 's', "wrong utf encoding.");
ASSERT(buffer[6] == ' ', "wrong utf encoding.");
ASSERT(buffer[7] == 'i', "wrong utf encoding.");
ASSERT(buffer[8] == 's', "wrong utf encoding.");
ASSERT(buffer[9] == ' ', "wrong utf encoding.");
ASSERT(buffer[10] == 'f', "wrong utf encoding.");
ASSERT(buffer[11] == 'u', "wrong utf encoding.");
ASSERT(buffer[12] == 'n', "wrong utf encoding.");
ASSERT(buffer[13] == '.', "wrong utf encoding.");
DataInput dataInput(buffer, dataOutput.getBufferLength());
char* str = NULL;
uint16_t res_length;
dataInput.readASCII(&str, &res_length);
cout << "Read from buffer..." << endl;
ASSERT(str != NULL, "expected non-null str");
ASSERT(res_length == 12, "expected length 12.");
dumpnbytes(reinterpret_cast<uint8_t*>(str), 12);
int res = strncmp(str, strOrig, 12);
ASSERT(res == 0, "expected a match.");
dataInput.freeUTFMemory(str);
}
END_TEST(NarrowStrings)
BEGIN_TEST(WideStrings)
{
DataOutput dataOutput;
wchar_t* strOrig = new wchar_t[40];
strOrig[0] = 0;
strOrig[1] = 0x7f;
strOrig[2] = 0x80;
strOrig[3] = 0x81;
strOrig[4] = 0xffff;
dumpnshorts(reinterpret_cast<uint16_t*>(strOrig), 5);
dataOutput.writeUTF(strOrig, 5);
const uint8_t* buffer = dataOutput.getBuffer();
cout << "Wrote to buffer..." << endl;
dumpnbytes(buffer, 12);
ASSERT(buffer[0] == 0x00, "wrong utf encoding.");
ASSERT(buffer[1] == 0x0a, "wrong utf encoding.");
ASSERT(buffer[2] == 0xc0, "wrong utf encoding.");
ASSERT(buffer[3] == 0x80, "wrong utf encoding.");
ASSERT(buffer[4] == 0x7f, "wrong utf encoding.");
ASSERT(buffer[5] == 0xc2, "wrong utf encoding.");
ASSERT(buffer[6] == 0x80, "wrong utf encoding.");
ASSERT(buffer[7] == 0xc2, "wrong utf encoding.");
ASSERT(buffer[8] == 0x81, "wrong utf encoding.");
ASSERT(buffer[9] == 0xef, "wrong utf encoding.");
ASSERT(buffer[10] == 0xbf, "wrong utf encoding.");
ASSERT(buffer[11] == 0xbf, "wrong utf encoding.");
cout << "sizeof wchar_t " << sizeof(wchar_t) << endl;
DataInput dataInput(buffer, dataOutput.getBufferLength());
wchar_t* str = NULL;
uint16_t res_length;
dataInput.readUTF(&str, &res_length);
ASSERT(str != NULL, "expected non-null str");
ASSERT(res_length == 5, "expected length 5.");
cout << "Read from buffer..." << endl;
dumpnshorts(reinterpret_cast<uint16_t*>(str), 5);
ASSERT(str[0] == 0x00, "wrong decoded value");
ASSERT(str[1] == 0x7f, "wrong decoded value");
ASSERT(str[2] == 0x80, "wrong decoded value");
ASSERT(str[3] == 0x81, "wrong decoded value");
ASSERT(str[4] == 0xffff, "wrong decoded value");
dataInput.freeUTFMemory(str);
delete[] strOrig;
}
END_TEST(WideStrings)