96 lines
3.2 KiB
C++
96 lines
3.2 KiB
C++
#include <common/buffer.h>
|
|
#include <common/test.h>
|
|
#include <common/uuid/uuid.h>
|
|
|
|
#include <xcodec/xcodec.h>
|
|
#include <xcodec/xcodec_cache.h>
|
|
#include <xcodec/xcodec_decoder.h>
|
|
#include <xcodec/xcodec_encoder.h>
|
|
#include <xcodec/xcodec_hash.h>
|
|
#include <xcodec/cache/coss/xcodec_cache_coss.h>
|
|
|
|
#include <boost/filesystem.hpp>
|
|
|
|
#include <fstream>
|
|
|
|
#include <stdlib.h>
|
|
|
|
using namespace boost::filesystem;
|
|
|
|
int
|
|
main(void)
|
|
{
|
|
|
|
char tmp_template[] = "/tmp/cache-coss-XXXXXX";
|
|
path cache_path = mkdtemp(tmp_template);
|
|
create_directory(cache_path);
|
|
|
|
typedef pair<uint64_t, const uint8_t*> segment_list_element_t;
|
|
typedef deque<segment_list_element_t> segment_list_t;
|
|
segment_list_t segment_list;
|
|
|
|
{
|
|
TestGroup g("/test/xcodec/encode-decode-coss/2/char_kat",
|
|
"XCodecEncoder::encode / XCodecDecoder::decode #2");
|
|
|
|
UUID uuid;
|
|
std::string cache_path_str = cache_path.string();
|
|
unsigned i, j;
|
|
|
|
uuid.generate();
|
|
|
|
for (j = 0; j < 4; j++) {
|
|
XCodecCache *cache = new XCodecCacheCOSS(uuid, cache_path_str,
|
|
10, 10, 10);
|
|
|
|
for (i = 0; i < 10000; i++) {
|
|
uint8_t random[XCODEC_SEGMENT_LENGTH];
|
|
|
|
ifstream rand_fd("/dev/urandom");
|
|
rand_fd.read(random, sizeof(random));
|
|
ASSERT("xcodec-coss1", rand_fd.good());
|
|
|
|
uint64_t hash = XCodecHash::hash(random);
|
|
const uint8_t* data = cache->lookup(hash);
|
|
if (data)
|
|
continue;
|
|
segment_list.push_front(make_pair(hash, data));
|
|
Buffer buf (data, XCODEC_SEGMENT_LENGTH);
|
|
cache->enter(hash, buf, 0);
|
|
}
|
|
|
|
delete cache;
|
|
cache = new XCodecCacheCOSS(uuid, cache_path_str,
|
|
10, 10, 10);
|
|
|
|
segment_list_element_t el;
|
|
const uint8_t *seg1, *seg2;
|
|
|
|
uint64_t hash;
|
|
while (!segment_list.empty()){
|
|
el = segment_list.back();
|
|
segment_list.pop_back();
|
|
seg1 = el.second;
|
|
seg2 = cache->lookup(el.first);
|
|
hash = el.first;
|
|
if (!seg2)
|
|
cout << "Segment not found: " << hash << endl;;
|
|
if (seg2) {
|
|
if (memcmp (seg1, seg2, XCODEC_SEGMENT_LENGTH))
|
|
cout << "Segments are not equal: " << hash <<
|
|
endl;
|
|
Test _(g, "Segment are not equal.",
|
|
seg1->equal(seg2));
|
|
}
|
|
}
|
|
|
|
delete cache;
|
|
}
|
|
|
|
}
|
|
|
|
remove_all(cache_path);
|
|
|
|
return (0);
|
|
}
|
|
|