aboutsummaryrefslogtreecommitdiffstats
path: root/document/src/tests
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-01-20 15:50:01 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-01-20 15:50:01 +0000
commit1f9cb926b91659840e687f9cab0f508522d58690 (patch)
treebff0152fd295b4d88f6a65089c09db82b6e00810 /document/src/tests
parent1d3fe1bedb648cfd497eeee61478fa45f332255b (diff)
Make it known that getting serialized size will always be expensive.
Diffstat (limited to 'document/src/tests')
-rw-r--r--document/src/tests/documenttestcase.cpp38
-rw-r--r--document/src/tests/documentupdatetestcase.cpp53
-rw-r--r--document/src/tests/fieldpathupdatetestcase.cpp28
3 files changed, 52 insertions, 67 deletions
diff --git a/document/src/tests/documenttestcase.cpp b/document/src/tests/documenttestcase.cpp
index a8d4829d355..4f769841d72 100644
--- a/document/src/tests/documenttestcase.cpp
+++ b/document/src/tests/documenttestcase.cpp
@@ -567,14 +567,14 @@ TEST(DocumentTest, testReadSerializedFile)
int fd = open(TEST_PATH("data/serializejava.dat").c_str(), O_RDONLY);
size_t len = lseek(fd,0,SEEK_END);
- ByteBuffer buf(len);
+ vespalib::alloc::Alloc buf = vespalib::alloc::Alloc::alloc(len);
lseek(fd,0,SEEK_SET);
- if (read(fd, buf.getBuffer(), len) != (ssize_t)len) {
+ if (read(fd, buf.get(), len) != (ssize_t)len) {
throw vespalib::Exception("read failed");
}
close(fd);
- nbostream stream(buf.getBufferAtPos(), len);
+ nbostream stream(buf.get(), len);
Document doc(repo, stream);
verifyJavaDocument(doc);
@@ -586,7 +586,7 @@ TEST(DocumentTest, testReadSerializedFile)
EXPECT_TRUE(buf2.empty());
buf2.rp(0);
EXPECT_EQ(len, buf2.size());
- EXPECT_TRUE(memcmp(buf2.peek(), buf.getBuffer(), buf2.size()) == 0);
+ EXPECT_TRUE(memcmp(buf2.peek(), buf.get(), buf2.size()) == 0);
doc2.setValue("stringfield", StringFieldValue("hei"));
@@ -603,14 +603,14 @@ TEST(DocumentTest, testReadSerializedFileCompressed)
int fd = open(TEST_PATH("data/serializejava-compressed.dat").c_str(), O_RDONLY);
int len = lseek(fd,0,SEEK_END);
- ByteBuffer buf(len);
+ vespalib::alloc::Alloc buf = vespalib::alloc::Alloc::alloc(len);
lseek(fd,0,SEEK_SET);
- if (read(fd, buf.getBuffer(), len) != len) {
+ if (read(fd, buf.get(), len) != len) {
throw vespalib::Exception("read failed");
}
close(fd);
- nbostream stream(buf.getBufferAtPos(), len);
+ nbostream stream(buf.get(), len);
Document doc(repo, stream);
verifyJavaDocument(doc);
}
@@ -753,14 +753,14 @@ TEST(DocumentTest,testReadSerializedAllVersions)
}
int fd = open(tests[i]._dataFile.c_str(), O_RDONLY);
int len = lseek(fd,0,SEEK_END);
- ByteBuffer buf(len);
+ vespalib::alloc::Alloc buf = vespalib::alloc::Alloc::alloc(len);
lseek(fd,0,SEEK_SET);
- if (read(fd, buf.getBuffer(), len) != len) {
- throw vespalib::Exception("read failed");
- }
+ if (read(fd, buf.get(), len) != len) {
+ throw vespalib::Exception("read failed");
+ }
close(fd);
- nbostream stream(buf.getBufferAtPos(), len);
+ nbostream stream(buf.get(), len);
Document doc(repo, stream);
IntFieldValue intVal;
@@ -1181,14 +1181,14 @@ TEST(DocumentTest, testAnnotationDeserialization)
int fd = open(TEST_PATH("data/serializejavawithannotations.dat").c_str(), O_RDONLY);
int len = lseek(fd,0,SEEK_END);
- ByteBuffer buf(len);
+ vespalib::alloc::Alloc buf = vespalib::alloc::Alloc::alloc(len);
lseek(fd,0,SEEK_SET);
- if (read(fd, buf.getBuffer(), len) != len) {
+ if (read(fd, buf.get(), len) != len) {
throw vespalib::Exception("read failed");
}
close(fd);
- nbostream stream1(buf.getBufferAtPos(), len);
+ nbostream stream1(buf.get(), len);
Document doc(repo, stream1);
StringFieldValue strVal;
EXPECT_TRUE(doc.getValue(doc.getField("story"), strVal));
@@ -1228,14 +1228,6 @@ TEST(DocumentTest, testAnnotationDeserialization)
EXPECT_EQ((int64_t)2384LL, longVal.getAsLong());
}
-TEST(DocumentTest, testGetSerializedSize)
-{
- TestDocMan testDocMan;
- Document::UP doc = testDocMan.createDocument();
-
- EXPECT_EQ(getSerializedSize(*doc), doc->getSerializedSize());
-}
-
TEST(DocumentTest, testDeserializeMultiple)
{
TestDocRepo testDocRepo;
diff --git a/document/src/tests/documentupdatetestcase.cpp b/document/src/tests/documentupdatetestcase.cpp
index 9ffe30c1080..a1ce861855c 100644
--- a/document/src/tests/documentupdatetestcase.cpp
+++ b/document/src/tests/documentupdatetestcase.cpp
@@ -43,14 +43,13 @@ namespace document {
namespace {
-ByteBuffer::UP serializeHEAD(const DocumentUpdate & update)
+nbostream
+serializeHEAD(const DocumentUpdate & update)
{
nbostream stream;
VespaDocumentSerializer serializer(stream);
serializer.writeHEAD(update);
- ByteBuffer::UP retVal(new ByteBuffer(stream.size()));
- retVal->putBytes(stream.peek(), stream.size());
- return retVal;
+ return stream;
}
nbostream serialize(const ValueUpdate & update)
@@ -83,25 +82,26 @@ void testRoundtripSerialize(const UpdateType& update, const DataType &type) {
}
void
-writeBufferToFile(const ByteBuffer &buf, const vespalib::string &fileName)
+writeBufferToFile(const nbostream &buf, const vespalib::string &fileName)
{
auto file = std::fstream(fileName, std::ios::out | std::ios::binary);
- file.write(buf.getBuffer(), buf.getPos());
+ file.write(buf.c_str(), buf.size());
assert(file.good());
file.close();
}
-ByteBuffer::UP
+nbostream
readBufferFromFile(const vespalib::string &fileName)
{
auto file = std::fstream(fileName, std::ios::in | std::ios::binary | std::ios::ate);
auto size = file.tellg();
auto result = std::make_unique<ByteBuffer>(size);
file.seekg(0);
- file.read(result->getBuffer(), size);
+ vespalib::alloc::Alloc buf = vespalib::alloc::Alloc::alloc(size);
+ file.read(static_cast<char *>(buf.get()), size);
assert(file.good());
file.close();
- return result;
+ return nbostream(std::move(buf), size);
}
}
@@ -132,9 +132,8 @@ TEST(DocumentUpdateTest, testSimpleUsage)
// Test that a document update can be serialized
DocumentUpdate docUpdate(repo, *docType, DocumentId("id:ns:test::1"));
docUpdate.addUpdate(fieldUpdateCopy);
- ByteBuffer::UP docBuf = serializeHEAD(docUpdate);
- docBuf->flip();
- auto docUpdateCopy(DocumentUpdate::createHEAD(repo, nbostream(docBuf->getBufferAtPos(), docBuf->getRemaining())));
+ nbostream docBuf = serializeHEAD(docUpdate);
+ auto docUpdateCopy(DocumentUpdate::createHEAD(repo, docBuf));
// Create a test document
Document doc(*docType, DocumentId("id:ns:test::1"));
@@ -236,7 +235,7 @@ TEST(DocumentUpdateTest, testUpdateArray)
// Create a document.
TestDocMan docMan;
Document::UP doc(docMan.createDocument());
- EXPECT_EQ((document::FieldValue*)NULL, doc->getValue(doc->getField("tags")).get());
+ EXPECT_EQ((document::FieldValue*)nullptr, doc->getValue(doc->getField("tags")).get());
// Assign array field.
ArrayFieldValue myarray(doc->getType().getField("tags").getDataType());
@@ -459,8 +458,7 @@ TEST(DocumentUpdateTest, testReadSerializedFile)
const std::string file_name = "data/crossplatform-java-cpp-doctypes.cfg";
DocumentTypeRepo repo(readDocumenttypesConfig(file_name));
- auto buf = readBufferFromFile("data/serializeupdatejava.dat");
- nbostream is(buf->getBufferAtPos(), buf->getRemaining());
+ auto is = readBufferFromFile("data/serializeupdatejava.dat");
DocumentUpdate::UP updp(DocumentUpdate::createHEAD(repo, is));
DocumentUpdate& upd(*updp);
@@ -539,8 +537,8 @@ TEST(DocumentUpdateTest, testGenerateSerializedFile)
ArithmeticValueUpdate(ArithmeticValueUpdate::Add, 2)))
.addUpdate(MapValueUpdate(StringFieldValue("foo"),
ArithmeticValueUpdate(ArithmeticValueUpdate::Mul, 2))));
- ByteBuffer::UP buf(serializeHEAD(upd));
- writeBufferToFile(*buf, "data/serializeupdatecpp.dat");
+ nbostream buf(serializeHEAD(upd));
+ writeBufferToFile(buf, "data/serializeupdatecpp.dat");
}
@@ -549,7 +547,7 @@ TEST(DocumentUpdateTest, testSetBadFieldTypes)
// Create a test document
TestDocMan docMan;
Document::UP doc(docMan.createDocument());
- EXPECT_EQ((document::FieldValue*)NULL, doc->getValue(doc->getField("headerval")).get());
+ EXPECT_EQ((document::FieldValue*)nullptr, doc->getValue(doc->getField("headerval")).get());
// Assign a float value to an int field.
DocumentUpdate update(docMan.getTypeRepo(), *doc->getDataType(), doc->getId());
@@ -561,7 +559,7 @@ TEST(DocumentUpdateTest, testSetBadFieldTypes)
update.applyTo(*doc);
// Verify that the field is NOT set in the document.
- EXPECT_EQ((document::FieldValue*)NULL,
+ EXPECT_EQ((document::FieldValue*)nullptr,
doc->getValue(doc->getField("headerval")).get());
}
@@ -569,7 +567,7 @@ TEST(DocumentUpdateTest, testUpdateApplyNoParams)
{
TestDocMan docMan;
Document::UP doc(docMan.createDocument());
- EXPECT_EQ((document::FieldValue*)NULL, doc->getValue(doc->getField("tags")).get());
+ EXPECT_EQ((document::FieldValue*)nullptr, doc->getValue(doc->getField("tags")).get());
DocumentUpdate update(docMan.getTypeRepo(), *doc->getDataType(), doc->getId());
update.addUpdate(FieldUpdate(doc->getField("tags")).addUpdate(AssignValueUpdate()));
@@ -1095,13 +1093,12 @@ struct TensorUpdateSerializeFixture {
}
void serializeUpdateToFile(const DocumentUpdate &update, const vespalib::string &fileName) {
- ByteBuffer::UP buf = serializeHEAD(update);
- writeBufferToFile(*buf, fileName);
+ nbostream buf = serializeHEAD(update);
+ writeBufferToFile(buf, fileName);
}
DocumentUpdate::UP deserializeUpdateFromFile(const vespalib::string &fileName) {
- auto buf = readBufferFromFile(fileName);
- nbostream stream(buf->getBufferAtPos(), buf->getRemaining());
+ auto stream = readBufferFromFile(fileName);
return DocumentUpdate::createHEAD(*repo, stream);
}
@@ -1181,10 +1178,9 @@ TEST(DocumentUpdateTest, testThatCreateIfNonExistentFlagIsSerializedAndDeseriali
{
CreateIfNonExistentFixture f;
- ByteBuffer::UP buf(serializeHEAD(*f.update));
- buf->flip();
+ nbostream buf(serializeHEAD(*f.update));
- DocumentUpdate::UP deserialized = DocumentUpdate::createHEAD(f.docMan.getTypeRepo(), *buf);
+ DocumentUpdate::UP deserialized = DocumentUpdate::createHEAD(f.docMan.getTypeRepo(), buf);
EXPECT_EQ(*f.update, *deserialized);
EXPECT_TRUE(deserialized->getCreateIfNonExistent());
}
@@ -1216,9 +1212,8 @@ TEST(DocumentUpdateTest, array_element_update_can_be_roundtrip_serialized)
ArrayUpdateFixture f;
auto buffer = serializeHEAD(*f.update);
- buffer->flip();
- auto deserialized = DocumentUpdate::createHEAD(f.doc_man.getTypeRepo(), *buffer);
+ auto deserialized = DocumentUpdate::createHEAD(f.doc_man.getTypeRepo(), buffer);
EXPECT_EQ(*f.update, *deserialized);
}
diff --git a/document/src/tests/fieldpathupdatetestcase.cpp b/document/src/tests/fieldpathupdatetestcase.cpp
index 82443f13716..39360119766 100644
--- a/document/src/tests/fieldpathupdatetestcase.cpp
+++ b/document/src/tests/fieldpathupdatetestcase.cpp
@@ -19,6 +19,7 @@
#include <gtest/gtest.h>
using vespalib::Identifiable;
+using vespalib::nbostream;
using namespace document::config_builder;
namespace document {
@@ -133,23 +134,21 @@ createTestDocument(const DocumentTypeRepo &repo)
return doc;
}
-ByteBuffer::UP serializeHEAD(const DocumentUpdate & update)
+nbostream
+serializeHEAD(const DocumentUpdate & update)
{
vespalib::nbostream stream;
VespaDocumentSerializer serializer(stream);
serializer.writeHEAD(update);
- ByteBuffer::UP retVal(new ByteBuffer(stream.size()));
- retVal->putBytes(stream.peek(), stream.size());
- return retVal;
+ return stream;
}
void testSerialize(const DocumentTypeRepo& repo, const DocumentUpdate& a) {
try{
- ByteBuffer::UP bb(serializeHEAD(a));
- bb->flip();
- DocumentUpdate::UP b(DocumentUpdate::createHEAD(repo, *bb));
+ auto bb(serializeHEAD(a));
+ DocumentUpdate::UP b(DocumentUpdate::createHEAD(repo, bb));
- EXPECT_EQ(size_t(0), bb->getRemaining());
+ EXPECT_EQ(size_t(0), bb.size());
EXPECT_EQ(a.getId().toString(), b->getId().toString());
EXPECT_EQ(a.getUpdates().size(), b->getUpdates().size());
for (size_t i(0); i < a.getUpdates().size(); i++) {
@@ -157,8 +156,7 @@ void testSerialize(const DocumentTypeRepo& repo, const DocumentUpdate& a) {
const FieldUpdate & ub = b->getUpdates()[i];
EXPECT_EQ(&ua.getField(), &ub.getField());
- EXPECT_EQ(ua.getUpdates().size(),
- ub.getUpdates().size());
+ EXPECT_EQ(ua.getUpdates().size(), ub.getUpdates().size());
for (size_t j(0); j < ua.getUpdates().size(); j++) {
EXPECT_EQ(ua.getUpdates()[j]->getType(), ub.getUpdates()[j]->getType());
}
@@ -1073,14 +1071,14 @@ TEST_F(FieldPathUpdateTestCase, testReadSerializedFile)
int fd = open(TEST_PATH("data/serialize-fieldpathupdate-java.dat").c_str(), O_RDONLY);
int len = lseek(fd,0,SEEK_END);
- ByteBuffer buf(len);
+ vespalib::alloc::Alloc buf = vespalib::alloc::Alloc::alloc(len);
lseek(fd,0,SEEK_SET);
- if (read(fd, buf.getBuffer(), len) != len) {
+ if (read(fd, buf.get(), len) != len) {
throw vespalib::Exception("read failed");
}
close(fd);
- DocumentUpdate::UP updp(DocumentUpdate::createHEAD(repo, buf));
+ DocumentUpdate::UP updp(DocumentUpdate::createHEAD(repo, nbostream(std::move(buf), len)));
DocumentUpdate& upd(*updp);
DocumentUpdate::UP compare(createDocumentUpdateForSerialization(repo));
@@ -1094,11 +1092,11 @@ TEST_F(FieldPathUpdateTestCase, testGenerateSerializedFile)
// Tests nothing, only generates a file for java test
DocumentUpdate::UP upd(createDocumentUpdateForSerialization(repo));
- ByteBuffer::UP buf(serializeHEAD(*upd));
+ nbostream buf(serializeHEAD(*upd));
int fd = open(TEST_PATH("data/serialize-fieldpathupdate-cpp.dat").c_str(),
O_WRONLY | O_TRUNC | O_CREAT, 0644);
- if (write(fd, buf->getBuffer(), buf->getPos()) != (ssize_t)buf->getPos()) {
+ if (write(fd, buf.c_str(), buf.size()) != (ssize_t)buf.size()) {
throw vespalib::Exception("write failed");
}
close(fd);