// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- // vim: ts=8 sw=2 smarttab /* * Ceph - scalable distributed file system * * Copyright (C) 2011 New Dream Network * * This is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License version 2.1, as published by the Free Software * Foundation. See file COPYING. * */ #include "include/rados/librgw.h" #include "gtest/gtest.h" #include static const char SAMPLE_XML_1[] = \ "\n\ \n\ foo\n\ MrFoo\n\ \n\ \n\ \n\ \n\ bar\n\ display-name\n\ \n\ FULL_CONTROL\n\ \n\ \n\ "; static const uint8_t VERSION1_BIN[] = { 0x01, 0x01, 0x07, 0x00, 0x00, 0x00, 0x63, 0x6d, 0x63, 0x63, 0x61, 0x62, 0x65, 0x07, 0x00, 0x00, 0x00, 0x63, 0x6d, 0x63, 0x63, 0x61, 0x62, 0x65, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x63, 0x6d, 0x63, 0x63, 0x61, 0x62, 0x65, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x63, 0x6d, 0x63, 0x63, 0x61, 0x62, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x63, 0x6d, 0x63, 0x63, 0x61, 0x62, 0x65, 0x0a, 0x0a }; TEST(LibRGW, FromBin) { int ret; const char *bin = (const char*)VERSION1_BIN; int len = sizeof(VERSION1_BIN) / sizeof(VERSION1_BIN[0]); librgw_t rgw; ret = librgw_create(&rgw, NULL); ASSERT_EQ(ret, 0); char *xml = NULL; ret = librgw_acl_bin2xml(rgw, bin, len, &xml); ASSERT_EQ(ret, 0); librgw_shutdown(rgw); } TEST(LibRGW, RoundTrip) { int ret; char *bin = NULL; int bin_len = 0; librgw_t rgw; ret = librgw_create(&rgw, NULL); ASSERT_EQ(ret, 0); ret = librgw_acl_xml2bin(rgw, SAMPLE_XML_1, &bin, &bin_len); ASSERT_EQ(ret, 0); char *xml2 = NULL; ret = librgw_acl_bin2xml(rgw, bin, bin_len, &xml2); ASSERT_EQ(ret, 0); char *bin2 = NULL; int bin_len2 = 0; ret = librgw_acl_xml2bin(rgw, xml2, &bin2, &bin_len2); ASSERT_EQ(ret, 0); // the serialized representation should be the same. ASSERT_EQ(bin_len, bin_len2); ASSERT_EQ(memcmp(bin, bin2, bin_len), 0); // Free memory // As you can see, we ignore freeing memory on test failures // Don't do this in your real programs! librgw_free_bin(rgw, bin); librgw_free_xml(rgw, xml2); librgw_free_bin(rgw, bin2); librgw_shutdown(rgw); }