blob: 195917bdcbdace805ae553d08fabe150b88e8a32 [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.
*/
#include "test.hh"
#include <vector>
int main()
{
org::apache::hadoop::record::test::RecRecord1 r1;
org::apache::hadoop::record::test::RecRecord1 r2;
{
hadoop::FileOutStream ostream;
ostream.open("/tmp/hadooptmp.dat", true);
hadoop::RecordWriter writer(ostream, hadoop::kBinary);
r1.setBoolVal(true);
r1.setByteVal((int8_t)0x66);
r1.setFloatVal(3.145);
r1.setDoubleVal(1.5234);
r1.setIntVal(4567);
r1.setLongVal(0x5a5a5a5a5a5aLL);
std::string& s = r1.getStringVal();
s = "random text";
writer.write(r1);
ostream.close();
hadoop::FileInStream istream;
istream.open("/tmp/hadooptmp.dat");
hadoop::RecordReader reader(istream, hadoop::kBinary);
reader.read(r2);
if (r1 == r2) {
printf("Binary archive test passed.\n");
} else {
printf("Binary archive test failed.\n");
}
istream.close();
}
{
hadoop::FileOutStream ostream;
ostream.open("/tmp/hadooptmp.txt", true);
hadoop::RecordWriter writer(ostream, hadoop::kCSV);
r1.setBoolVal(true);
r1.setByteVal((int8_t)0x66);
r1.setFloatVal(3.145);
r1.setDoubleVal(1.5234);
r1.setIntVal(4567);
r1.setLongVal(0x5a5a5a5a5a5aLL);
std::string& s = r1.getStringVal();
s = "random text";
writer.write(r1);
ostream.close();
hadoop::FileInStream istream;
istream.open("/tmp/hadooptmp.txt");
hadoop::RecordReader reader(istream, hadoop::kCSV);
reader.read(r2);
if (r1 == r2) {
printf("CSV archive test passed.\n");
} else {
printf("CSV archive test failed.\n");
}
istream.close();
}
{
hadoop::FileOutStream ostream;
ostream.open("/tmp/hadooptmp.xml", true);
hadoop::RecordWriter writer(ostream, hadoop::kXML);
r1.setBoolVal(true);
r1.setByteVal((int8_t)0x66);
r1.setFloatVal(3.145);
r1.setDoubleVal(1.5234);
r1.setIntVal(4567);
r1.setLongVal(0x5a5a5a5a5a5aLL);
std::string& s = r1.getStringVal();
s = "random text";
writer.write(r1);
ostream.close();
hadoop::FileInStream istream;
istream.open("/tmp/hadooptmp.xml");
hadoop::RecordReader reader(istream, hadoop::kXML);
reader.read(r2);
if (r1 == r2) {
printf("XML archive test passed.\n");
} else {
printf("XML archive test failed.\n");
}
istream.close();
}
/*
* Tests to check for versioning functionality
*/
// basic test
// write out a record and its type info, read it back using its typeinfo
{
hadoop::FileOutStream ostream, ortistream;
ostream.open("/tmp/hadooptmp.dat", true);
ortistream.open("/tmp/hadooprti.dat", true);
hadoop::RecordWriter writer(ostream, hadoop::kBinary);
hadoop::RecordWriter writerRti(ortistream, hadoop::kBinary);
r1.setBoolVal(true);
r1.setByteVal((int8_t)0x66);
r1.setFloatVal(3.145);
r1.setDoubleVal(1.5234);
r1.setIntVal(4567);
r1.setLongVal(0x5a5a5a5a5a5aLL);
std::string& s = r1.getStringVal();
s = "random text";
writer.write(r1);
ostream.close();
// write out rti info
writerRti.write(org::apache::hadoop::record::test::RecRecord1::getTypeInfo());
ortistream.close();
// read
hadoop::FileInStream istream;
istream.open("/tmp/hadooptmp.dat");
hadoop::RecordReader reader(istream, hadoop::kBinary);
hadoop::FileInStream irtistream;
irtistream.open("/tmp/hadooprti.dat");
hadoop::RecordReader readerRti(irtistream, hadoop::kBinary);
hadoop::RecordTypeInfo rti;
readerRti.read(rti);
irtistream.close();
org::apache::hadoop::record::test::RecRecord1::setTypeFilter(rti);
reader.read(r2);
if (r1 == r2) {
printf("Basic versioning test passed.\n");
} else {
printf("Basic versioning test failed.\n");
}
istream.close();
}
// versioning:write out a record and its type info, read back a similar record using the written record's typeinfo
{
hadoop::FileOutStream ostream, ortistream;
ostream.open("/tmp/hadooptmp.dat", true);
ortistream.open("/tmp/hadooprti.dat", true);
hadoop::RecordWriter writer(ostream, hadoop::kBinary);
hadoop::RecordWriter writerRti(ortistream, hadoop::kBinary);
// we create an array of records to write
std::vector<org::apache::hadoop::record::test::RecRecordOld*> recsWrite;
int i, j, k, l;
char buf[1000];
for (i=0; i<5; i++) {
org::apache::hadoop::record::test::RecRecordOld* ps1Rec =
new org::apache::hadoop::record::test::RecRecordOld();
sprintf(buf, "This is record s1: %d", i);
ps1Rec->getName().assign(buf);
for (j=0; j<3; j++) {
ps1Rec->getIvec().push_back((int64_t)(i+j));
}
for (j=0; j<2; j++) {
std::vector<org::apache::hadoop::record::test::RecRecord0>* pVec =
new std::vector<org::apache::hadoop::record::test::RecRecord0>();
for (k=0; k<3; k++) {
org::apache::hadoop::record::test::RecRecord0 *psRec =
new org::apache::hadoop::record::test::RecRecord0();
sprintf(buf, "This is record s: (%d: %d)", j, k);
psRec->getStringVal().assign(buf);
}
ps1Rec->getSvec().push_back(*pVec);
}
sprintf(buf, "This is record s: %d", i);
ps1Rec->getInner().getStringVal().assign(buf);
for (l=0; l<2; l++) {
std::vector<std::vector<std::string> >* ppVec =
new std::vector<std::vector<std::string> >();
for (j=0; j<2; j++) {
std::vector< std::string >* pVec =
new std::vector< std::string >();
for (k=0; k<3; k++) {
sprintf(buf, "THis is a nested string: (%d: %d: %d)", l, j, k);
std::string* s = new std::string((const char*)buf);
pVec->push_back(*s);
}
}
ps1Rec->getStrvec().push_back(*ppVec);
}
ps1Rec->setI1(100+i);
ps1Rec->getMap1()[23] = "23";
ps1Rec->getMap1()[11] = "11";
std::map<int32_t, int64_t>* m1 = new std::map<int32_t, int64_t>();
std::map<int32_t, int64_t>* m2 = new std::map<int32_t, int64_t>();
(*m1)[5] = 5;
(*m1)[10] = 10;
(*m2)[15] = 15;
(*m2)[20] = 20;
ps1Rec->getMvec1().push_back(*m1);
ps1Rec->getMvec1().push_back(*m2);
ps1Rec->getMvec2().push_back(*m1);
recsWrite.push_back(ps1Rec);
}
// write out to file
for (unsigned int i=0; i<recsWrite.size(); i++) {
writer.write(*(recsWrite[i]));
}
ostream.close();
// write out rti info
writerRti.write(org::apache::hadoop::record::test::RecRecordOld::getTypeInfo());
ortistream.close();
// read
hadoop::FileInStream istream;
istream.open("/tmp/hadooptmp.dat");
hadoop::RecordReader reader(istream, hadoop::kBinary);
hadoop::FileInStream irtistream;
irtistream.open("/tmp/hadooprti.dat");
hadoop::RecordReader readerRti(irtistream, hadoop::kBinary);
hadoop::RecordTypeInfo rti;
readerRti.read(rti);
irtistream.close();
org::apache::hadoop::record::test::RecRecordNew::setTypeFilter(rti);
// read records
std::vector<org::apache::hadoop::record::test::RecRecordNew*> recsRead;
for (unsigned int i=0; i<recsWrite.size(); i++) {
org::apache::hadoop::record::test::RecRecordNew* ps2Rec =
new org::apache::hadoop::record::test::RecRecordNew();
reader.read(*ps2Rec);
recsRead.push_back(ps2Rec);
}
istream.close();
// compare
bool pass = true;
for (unsigned int i=0; i<recsRead.size(); i++) {
org::apache::hadoop::record::test::RecRecordNew* ps2In = recsRead[i];
org::apache::hadoop::record::test::RecRecordOld* ps1Out = recsWrite[i];
if (!ps2In->getName2().empty()) {
printf("Error in s2: name2\n");
pass = false;
}
if (!(ps2In->getInner() == ps1Out->getInner())) {
printf("error in s2: s1 struct\n");
pass = false;
}
if (0 != ps2In->getIvec().size()) {
printf("error in s2: ivec\n");
pass = false;
}
if (0 != ps2In->getSvec().size()) {
printf("error in s2: svec\n");
pass = false;
}
for (unsigned int j=0; j<ps2In->getStrvec().size(); j++) {
::std::vector< ::std::vector< ::std::string > >& ss2Vec = ps2In->getStrvec()[j];
::std::vector< ::std::vector< ::std::string > >& ss1Vec = ps1Out->getStrvec()[j];
for (unsigned int k=0; k<ss2Vec.size(); k++) {
::std::vector< ::std::string >& s2Vec = ss2Vec[k];
::std::vector< ::std::string >& s1Vec = ss1Vec[k];
for (unsigned int l=0; l<s2Vec.size(); l++) {
if (s2Vec[l] != s1Vec[l]) {
printf("Error in s2: s2Vec\n");
pass = false;
}
}
}
}
if (0 != ps2In->getMap1().size()) {
printf("Error in s2: map1\n");
pass = false;
}
for (unsigned int j=0; j<ps2In->getMvec2().size(); j++) {
if (ps2In->getMvec2()[j] != ps1Out->getMvec2()[j]) {
printf("Error in s2: mvec2\n");
pass = false;
}
}
}
if (pass)
printf("Versioning test passed.\n");
}
return 0;
}