Blame unit-tests/DDSTest.cc

Packit a4aae4
// -*- mode: c++; c-basic-offset:4 -*-
Packit a4aae4
Packit a4aae4
// This file is part of libdap, A C++ implementation of the OPeNDAP Data
Packit a4aae4
// Access Protocol.
Packit a4aae4
Packit a4aae4
// Copyright (c) 2002,2003 OPeNDAP, Inc.
Packit a4aae4
// Author: James Gallagher <jgallagher@opendap.org>
Packit a4aae4
//
Packit a4aae4
// This library is free software; you can redistribute it and/or
Packit a4aae4
// modify it under the terms of the GNU Lesser General Public
Packit a4aae4
// License as published by the Free Software Foundation; either
Packit a4aae4
// version 2.1 of the License, or (at your option) any later version.
Packit a4aae4
//
Packit a4aae4
// This library is distributed in the hope that it will be useful,
Packit a4aae4
// but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit a4aae4
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit a4aae4
// Lesser General Public License for more details.
Packit a4aae4
//
Packit a4aae4
// You should have received a copy of the GNU Lesser General Public
Packit a4aae4
// License along with this library; if not, write to the Free Software
Packit a4aae4
// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
Packit a4aae4
//
Packit a4aae4
// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
Packit a4aae4
Packit a4aae4
#include "config.h"
Packit a4aae4
Packit a4aae4
#include <cppunit/TextTestRunner.h>
Packit a4aae4
#include <cppunit/extensions/TestFactoryRegistry.h>
Packit a4aae4
#include <cppunit/extensions/HelperMacros.h>
Packit a4aae4
Packit a4aae4
#include <sstream>
Packit a4aae4
Packit a4aae4
#include "Byte.h"
Packit a4aae4
#include "Int16.h"
Packit a4aae4
#include "UInt16.h"
Packit a4aae4
#include "Int32.h"
Packit a4aae4
#include "UInt32.h"
Packit a4aae4
#include "Float32.h"
Packit a4aae4
#include "Float64.h"
Packit a4aae4
#include "Str.h"
Packit a4aae4
#include "Url.h"
Packit a4aae4
#include "Array.h"
Packit a4aae4
#include "Structure.h"
Packit a4aae4
#include "Sequence.h"
Packit a4aae4
#include "Grid.h"
Packit a4aae4
Packit a4aae4
#include "DDS.h"
Packit a4aae4
Packit a4aae4
#include "GNURegex.h"
Packit a4aae4
#include "GetOpt.h"
Packit a4aae4
#include "util.h"
Packit a4aae4
#include "debug.h"
Packit a4aae4
Packit a4aae4
#include "testFile.h"
Packit a4aae4
#include "test_config.h"
Packit a4aae4
Packit a4aae4
static bool debug = false;
Packit a4aae4
Packit a4aae4
#undef DBG
Packit a4aae4
#define DBG(x) do { if (debug) {x;} } while(false)
Packit a4aae4
Packit a4aae4
using namespace CppUnit;
Packit a4aae4
using namespace std;
Packit a4aae4
Packit a4aae4
namespace libdap {
Packit a4aae4
Packit a4aae4
class DDSTest: public TestFixture {
Packit a4aae4
private:
Packit a4aae4
    DDS *dds1, *dds2;
Packit a4aae4
    BaseTypeFactory factory;
Packit a4aae4
Packit a4aae4
    DDS *dds_dap4;
Packit a4aae4
Packit a4aae4
public:
Packit a4aae4
    DDSTest() :
Packit a4aae4
        dds1(0), dds2(0), dds_dap4(0)
Packit a4aae4
    {
Packit a4aae4
    }
Packit a4aae4
    ~DDSTest()
Packit a4aae4
    {
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void setUp()
Packit a4aae4
    {
Packit a4aae4
        dds1 = new DDS(&factory, "test1");
Packit a4aae4
        dds2 = new DDS(&factory, "test2");
Packit a4aae4
Packit a4aae4
        dds_dap4 = new DDS(&factory, "test2", "4.0");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void tearDown()
Packit a4aae4
    {
Packit a4aae4
        delete dds1;
Packit a4aae4
        dds1 = 0;
Packit a4aae4
        delete dds2;
Packit a4aae4
        dds2 = 0;
Packit a4aae4
Packit a4aae4
        delete dds_dap4;
Packit a4aae4
        dds_dap4 = 0;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    bool re_match(Regex &r, const string &s)
Packit a4aae4
    {
Packit a4aae4
        int match = r.match(s.c_str(), s.length());
Packit a4aae4
        DBG(cerr << "Match: " << match << " should be: " << s.length() << endl);
Packit a4aae4
        return match == static_cast<int>(s.length());
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    // The tests commented exercise features no longer supported
Packit a4aae4
    // by libdap. In particular, a DAS must now be properly structured
Packit a4aae4
    // to work with transfer_attributes() - if a handler builds a malformed
Packit a4aae4
    // DAS, it will need to specialize the BaseType::transfer_attributes()
Packit a4aae4
    // method.
Packit a4aae4
CPPUNIT_TEST_SUITE (DDSTest);
Packit a4aae4
    CPPUNIT_TEST(transfer_attributes_test_1);
Packit a4aae4
    CPPUNIT_TEST(transfer_attributes_test_2);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST(symbol_name_test);
Packit a4aae4
Packit a4aae4
    // These test both transfer_attributes() and print_xml()
Packit a4aae4
    CPPUNIT_TEST(print_xml_test);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST(print_xml_test2);
Packit a4aae4
    CPPUNIT_TEST(print_xml_test3);
Packit a4aae4
Packit a4aae4
    // The X_1 tests look at the proper merging of hdf4's _dim_n attributes.
Packit a4aae4
    // But that functionality was moved from libdap to the hdf4 handler.
Packit a4aae4
    // CPPUNIT_TEST(print_xml_test3_1);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST(print_xml_test4);
Packit a4aae4
    CPPUNIT_TEST(print_xml_test5);
Packit a4aae4
    // CPPUNIT_TEST(print_xml_test5_1);
Packit a4aae4
    CPPUNIT_TEST(print_xml_test6);
Packit a4aae4
    // CPPUNIT_TEST(print_xml_test6_1);
Packit a4aae4
    CPPUNIT_TEST(print_dmr_test);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST(get_response_size_test);
Packit a4aae4
    CPPUNIT_TEST(get_response_size_test_c);
Packit a4aae4
    CPPUNIT_TEST(get_response_size_test_c2);
Packit a4aae4
    CPPUNIT_TEST(get_response_size_test_c3);
Packit a4aae4
Packit a4aae4
    // see comment in code below. jhrg 2/4/14 CPPUNIT_TEST(get_response_size_test_seq);
Packit a4aae4
    CPPUNIT_TEST(get_response_size_test_seq_c);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST_SUITE_END()
Packit a4aae4
    ;
Packit a4aae4
Packit a4aae4
    void transfer_attributes_test_1()
Packit a4aae4
    {
Packit a4aae4
        try {
Packit a4aae4
            dds1->parse((string) TEST_SRC_DIR + "/dds-testsuite/fnoc1.nc.dds");
Packit a4aae4
            DAS das;
Packit a4aae4
            das.parse((string) TEST_SRC_DIR + "/dds-testsuite/fnoc1.nc.das");
Packit a4aae4
            dds1->transfer_attributes(&das);
Packit a4aae4
Packit a4aae4
            DBG2(dds1->print_xml(cerr, false, ""));
Packit a4aae4
Packit a4aae4
            AttrTable &at = dds1->get_attr_table();
Packit a4aae4
            AttrTable::Attr_iter i = at.attr_begin();
Packit a4aae4
            CPPUNIT_ASSERT(i != at.attr_end() && at.get_name(i) == "NC_GLOBAL");
Packit a4aae4
            CPPUNIT_ASSERT(i != at.attr_end() && at.get_name(++i) == "DODS_EXTRA");
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
            cout << "Error: " << e.get_error_message() << endl;
Packit a4aae4
            CPPUNIT_FAIL("Error thrown!");
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void transfer_attributes_test_2()
Packit a4aae4
    {
Packit a4aae4
        try {
Packit a4aae4
            dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/3B42.980909.5.HDF.dds");
Packit a4aae4
            DAS das;
Packit a4aae4
            das.parse((string) TEST_SRC_DIR + "/dds-testsuite/3B42.980909.5.hacked.HDF.das");
Packit a4aae4
            dds2->transfer_attributes(&das);
Packit a4aae4
Packit a4aae4
            DBG2(dds2->print_xml(cerr, false, ""));
Packit a4aae4
Packit a4aae4
            AttrTable &at = dds2->get_attr_table();
Packit a4aae4
            AttrTable::Attr_iter i = at.attr_begin();
Packit a4aae4
            CPPUNIT_ASSERT(i != at.attr_end() && at.get_name(i) == "HDF_GLOBAL");
Packit a4aae4
            CPPUNIT_ASSERT(i != at.attr_end() && at.get_name(++i) == "CoreMetadata");
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
            cout << "Error: " << e.get_error_message() << endl;
Packit a4aae4
            CPPUNIT_FAIL("Error thrown!");
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void symbol_name_test()
Packit a4aae4
    {
Packit a4aae4
        try {
Packit a4aae4
            // read a DDS.
Packit a4aae4
            dds1->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.18");
Packit a4aae4
            CPPUNIT_ASSERT(dds1->var("oddTemp"));
Packit a4aae4
Packit a4aae4
            dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19b");
Packit a4aae4
            CPPUNIT_ASSERT(dds2->var("b#c"));
Packit a4aae4
            CPPUNIT_ASSERT(dds2->var("b%23c"));
Packit a4aae4
            CPPUNIT_ASSERT(dds2->var("huh.Image#data"));
Packit a4aae4
            CPPUNIT_ASSERT(dds2->var("c d"));
Packit a4aae4
            CPPUNIT_ASSERT(dds2->var("c%20d"));
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
            cerr << e.get_error_message() << endl;
Packit a4aae4
            CPPUNIT_FAIL("Caught unexpected Error object");
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void print_xml_test()
Packit a4aae4
    {
Packit a4aae4
        try {
Packit a4aae4
            dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19b");
Packit a4aae4
            ostringstream oss;
Packit a4aae4
            dds2->print_xml_writer(oss, false, "http://localhost/dods/test.xyz");
Packit a4aae4
            DBG2(cerr << "Printed DDX: " << oss.str() << endl);
Packit a4aae4
Packit a4aae4
            string baseline = readTestBaseline((string) TEST_SRC_DIR + "/dds-testsuite/test.19b.xml");
Packit a4aae4
            DBG2(cerr << "The baseline: " << baseline << endl);
Packit a4aae4
Packit a4aae4
            CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
            cerr << e.get_error_message() << endl;
Packit a4aae4
            CPPUNIT_FAIL("Caught unexpected Error object");
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void print_xml_test2()
Packit a4aae4
    {
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19c");
Packit a4aae4
        DAS das;
Packit a4aae4
        das.parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19c.das");
Packit a4aae4
Packit a4aae4
        dds2->transfer_attributes(&das);
Packit a4aae4
Packit a4aae4
        ostringstream oss;
Packit a4aae4
        dds2->print_xml_writer(oss, false, "http://localhost/dods/test.xyz");
Packit a4aae4
Packit a4aae4
        DBG2(cerr << oss.str() << endl);
Packit a4aae4
Packit a4aae4
        string baseline = readTestBaseline((string) TEST_SRC_DIR + "/dds-testsuite/test.19c.xml");
Packit a4aae4
        DBG2(cerr << baseline << endl);
Packit a4aae4
        CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void print_xml_test3()
Packit a4aae4
    {
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19d");
Packit a4aae4
        DAS das;
Packit a4aae4
        das.parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19d.das");
Packit a4aae4
Packit a4aae4
        dds2->transfer_attributes(&das);
Packit a4aae4
Packit a4aae4
        ostringstream oss;
Packit a4aae4
        dds2->print_xml_writer(oss, false, "http://localhost/dods/test.xyz");
Packit a4aae4
Packit a4aae4
        DBG2(cerr << oss.str() << endl);
Packit a4aae4
Packit a4aae4
        string baseline = readTestBaseline((string) TEST_SRC_DIR + "/dds-testsuite/test.19d.xml");
Packit a4aae4
        DBG2(cerr << baseline << endl);
Packit a4aae4
        CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    // This tests the HDF4 _dim_n attribute. support for that was
Packit a4aae4
    // moved to the handler itself.
Packit a4aae4
    void print_xml_test3_1()
Packit a4aae4
    {
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19d");
Packit a4aae4
        DAS das;
Packit a4aae4
        das.parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19d1.das");
Packit a4aae4
Packit a4aae4
        dds2->transfer_attributes(&das);
Packit a4aae4
Packit a4aae4
        ostringstream oss;
Packit a4aae4
        dds2->print_xml_writer(oss, false, "http://localhost/dods/test.xyz");
Packit a4aae4
Packit a4aae4
        DBG2(cerr << oss.str() << endl);
Packit a4aae4
Packit a4aae4
        string baseline = readTestBaseline((string) TEST_SRC_DIR + "/dds-testsuite/test.19d1.xml");
Packit a4aae4
        DBG2(cerr << baseline << endl);
Packit a4aae4
        CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void print_xml_test4()
Packit a4aae4
    {
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19e");
Packit a4aae4
        DAS das;
Packit a4aae4
        das.parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19e.das");
Packit a4aae4
Packit a4aae4
        dds2->transfer_attributes(&das);
Packit a4aae4
Packit a4aae4
        DBG(dds2->var("c%20d")->get_attr_table().print(stderr));
Packit a4aae4
Packit a4aae4
        ostringstream oss;
Packit a4aae4
        dds2->print_xml_writer(oss, false, "http://localhost/dods/test.xyz");
Packit a4aae4
Packit a4aae4
        DBG(cerr << oss.str() << endl);
Packit a4aae4
Packit a4aae4
        string baseline = readTestBaseline((string) TEST_SRC_DIR + "/dds-testsuite/test.19e.xml");
Packit a4aae4
        DBG2(cerr << baseline << endl);
Packit a4aae4
        CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void print_xml_test5()
Packit a4aae4
    {
Packit a4aae4
        string dds_file((string) TEST_SRC_DIR + "/dds-testsuite/test.19f");
Packit a4aae4
        dds2->parse(dds_file);
Packit a4aae4
        DAS das;
Packit a4aae4
        string das_file((string) TEST_SRC_DIR + "/dds-testsuite/test.19f.das");
Packit a4aae4
        das.parse(das_file);
Packit a4aae4
        string baseline_file((string) TEST_SRC_DIR + "/dds-testsuite/test.19f.xml");
Packit a4aae4
        string baseline = readTestBaseline(baseline_file);
Packit a4aae4
Packit a4aae4
        try {
Packit a4aae4
            dds2->transfer_attributes(&das);
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
            cerr << "Error: " << e.get_error_message() << endl;
Packit a4aae4
            CPPUNIT_FAIL("Error exception");
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        DBG(dds2->var("huh")->get_attr_table().print(stderr));
Packit a4aae4
Packit a4aae4
        ostringstream oss;
Packit a4aae4
        dds2->print_xml_writer(oss, false, "http://localhost/dods/test.xyz");
Packit a4aae4
Packit a4aae4
        DBG(cerr << "BASELINE DOCUMENT: " << baseline_file << endl);
Packit a4aae4
        DBG(cerr << baseline << endl);
Packit a4aae4
Packit a4aae4
        DBG(cerr << "RESULT DOCUMENT: " << endl);
Packit a4aae4
        DBG(cerr << oss.str() << endl);
Packit a4aae4
Packit a4aae4
        CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    // Tests flat DAS into a DDS; no longer supported by libdap; specialize
Packit a4aae4
    // handlers if they make these malformed DAS objects
Packit a4aae4
    void print_xml_test5_1()
Packit a4aae4
    {
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19f");
Packit a4aae4
        DAS das;
Packit a4aae4
        das.parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19f1.das");
Packit a4aae4
Packit a4aae4
        try {
Packit a4aae4
            dds2->transfer_attributes(&das);
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
            cerr << "Error: " << e.get_error_message() << endl;
Packit a4aae4
            CPPUNIT_FAIL("Error exception");
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        DBG(dds2->var("huh")->get_attr_table().print(stderr));
Packit a4aae4
Packit a4aae4
        ostringstream oss;
Packit a4aae4
        dds2->print_xml_writer(oss, false, "http://localhost/dods/test.xyz");
Packit a4aae4
Packit a4aae4
        DBG(cerr << oss.str() << endl);
Packit a4aae4
Packit a4aae4
        string baseline = readTestBaseline((string) TEST_SRC_DIR + "/dds-testsuite/test.19f1.xml");
Packit a4aae4
        DBG2(cerr << baseline << endl);
Packit a4aae4
        CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void print_xml_test6()
Packit a4aae4
    {
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19b");
Packit a4aae4
        DAS das;
Packit a4aae4
        das.parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19b.das");
Packit a4aae4
Packit a4aae4
        dds2->transfer_attributes(&das);
Packit a4aae4
Packit a4aae4
        ostringstream oss;
Packit a4aae4
        dds2->print_xml_writer(oss, false, "http://localhost/dods/test.xyz");
Packit a4aae4
Packit a4aae4
        DBG(cerr << oss.str() << endl);
Packit a4aae4
Packit a4aae4
        string baseline = readTestBaseline((string) TEST_SRC_DIR + "/dds-testsuite/test.19b6.xml");
Packit a4aae4
        DBG2(cerr << baseline << endl);
Packit a4aae4
        CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    // Tests flat DAS into a DDS; no longer supported by libdap; specialize
Packit a4aae4
    // handlers if they make these malformed DAS objects
Packit a4aae4
    void print_xml_test6_1()
Packit a4aae4
    {
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19g");
Packit a4aae4
        DAS das;
Packit a4aae4
        das.parse((string) TEST_SRC_DIR + "/dds-testsuite/test.19g.das");
Packit a4aae4
Packit a4aae4
        try {
Packit a4aae4
            dds2->transfer_attributes(&das);
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
            cerr << "Error: " << e.get_error_message() << endl;
Packit a4aae4
            CPPUNIT_FAIL("Error exception");
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        DBG(dds2->var("huh")->get_attr_table().print(stderr));
Packit a4aae4
Packit a4aae4
        ostringstream oss;
Packit a4aae4
        dds2->print_xml_writer(oss, false, "http://localhost/dods/test.xyz");
Packit a4aae4
Packit a4aae4
        DBG(cerr << oss.str() << endl);
Packit a4aae4
Packit a4aae4
        string baseline = readTestBaseline((string) TEST_SRC_DIR + "/dds-testsuite/test.19g.xml");
Packit a4aae4
        DBG2(cerr << baseline << endl);
Packit a4aae4
        CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void print_dmr_test()
Packit a4aae4
    {
Packit a4aae4
        try {
Packit a4aae4
            dds_dap4->parse((string) TEST_SRC_DIR + "/dds-testsuite/fnoc1.nc.dds");
Packit a4aae4
            DAS das;
Packit a4aae4
            das.parse((string) TEST_SRC_DIR + "/dds-testsuite/fnoc1.nc.das");
Packit a4aae4
            dds_dap4->transfer_attributes(&das);
Packit a4aae4
#if 0
Packit a4aae4
            string file = (string) TEST_SRC_DIR + "/dds-testsuite/fnoc1.nc.dmr.xml";
Packit a4aae4
            ofstream d(file.c_str());
Packit a4aae4
            dds_dap4->print_dmr(d, false);
Packit a4aae4
            d.close();
Packit a4aae4
#endif
Packit a4aae4
            ostringstream oss;
Packit a4aae4
            dds_dap4->print_dmr(oss, false);
Packit a4aae4
Packit a4aae4
            string baseline = readTestBaseline((string) TEST_SRC_DIR + "/dds-testsuite/fnoc1.nc.dmr.xml");
Packit a4aae4
Packit a4aae4
            DBG(cerr << "Baseline: -->" << baseline << "<--" << endl);
Packit a4aae4
            DBG(cerr << "DMR: -->" << oss.str() << "<--" << endl);
Packit a4aae4
Packit a4aae4
            CPPUNIT_ASSERT(baseline == oss.str());
Packit a4aae4
        }
Packit a4aae4
        catch (Error &e) {
Packit a4aae4
            CPPUNIT_FAIL(e.get_error_message());
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void get_response_size_test()
Packit a4aae4
    {
Packit a4aae4
        dds1->parse((string) TEST_SRC_DIR + "/dds-testsuite/3B42.980909.5.HDF.dds");
Packit a4aae4
        CPPUNIT_ASSERT(dds1->get_request_size(false) == 230400);
Packit a4aae4
        DBG(cerr << "3B42.980909.5.HDF response size: " << dds1->get_request_size(false) << endl);
Packit a4aae4
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/coads_climatology.nc.dds");
Packit a4aae4
        CPPUNIT_ASSERT(dds2->get_request_size(false) == 3119424);
Packit a4aae4
        DBG(cerr << "coads_climatology.nc response size: " << dds2->get_request_size(false) << endl);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void get_response_size_test_c()
Packit a4aae4
    {
Packit a4aae4
        ConstraintEvaluator eval;
Packit a4aae4
Packit a4aae4
        dds1->parse((string) TEST_SRC_DIR + "/dds-testsuite/3B42.980909.5.HDF.dds");
Packit a4aae4
        eval.parse_constraint("percipitate", *dds1);
Packit a4aae4
        DBG(cerr << "3B42.980909.5.HDF response size: " << dds1->get_request_size(true) << endl);
Packit a4aae4
        CPPUNIT_ASSERT(dds1->get_request_size(true) == 115200);
Packit a4aae4
        CPPUNIT_ASSERT(dds1->get_request_size(false) == 230400);
Packit a4aae4
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/coads_climatology.nc.dds");
Packit a4aae4
        eval.parse_constraint("SST", *dds2);
Packit a4aae4
        DBG(cerr << "coads_climatology.nc response size: " << dds2->get_request_size(true) << endl);
Packit a4aae4
        CPPUNIT_ASSERT(dds2->get_request_size(true) == 779856);
Packit a4aae4
        CPPUNIT_ASSERT(dds2->get_request_size(false) == 3119424);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void get_response_size_test_c2()
Packit a4aae4
    {
Packit a4aae4
        ConstraintEvaluator eval;
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/coads_climatology.nc.dds");
Packit a4aae4
        eval.parse_constraint("SST[0:5][0:44][0:89]", *dds2);
Packit a4aae4
        //cerr << "coads_climatology.nc response size: " << dds2->get_request_size(true) << endl;
Packit a4aae4
        CPPUNIT_ASSERT(dds2->get_request_size(true) == 98328);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void get_response_size_test_c3()
Packit a4aae4
    {
Packit a4aae4
        ConstraintEvaluator eval;
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/coads_climatology.nc.dds");
Packit a4aae4
        eval.parse_constraint("SST[0][0:44][0:89]", *dds2);
Packit a4aae4
        DBG(cerr << "coads_climatology.nc response size: " << dds2->get_request_size(true) << endl);
Packit a4aae4
        CPPUNIT_ASSERT(dds2->get_request_size(true) == 17288);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
#if 0
Packit a4aae4
    // This test includes a DAP String and the current implementation of Str::width(bool)
Packit a4aae4
    // returns sizeof(std::string) which I'm not sure is what it should be doing. Return to
Packit a4aae4
    // this and decide if it should be returning *string or ...? jhrg 2/4/14
Packit a4aae4
    // FIXME
Packit a4aae4
    void get_response_size_test_seq() {
Packit a4aae4
        ConstraintEvaluator eval;
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/S2000415.HDF.dds");
Packit a4aae4
        eval.parse_constraint("NSCAT%20Rev%2020.NSCAT%20L2", *dds2);
Packit a4aae4
        DBG(cerr << "S2000415.HDF response size: " << dds2->get_request_size(true) << endl);
Packit a4aae4
        DBG(dds2->print_constrained(cerr));
Packit a4aae4
        CPPUNIT_ASSERT(dds2->get_request_size(true) == 16 || dds2->get_request_size(true) == 12);
Packit a4aae4
        // sizeof(string) == 8 or 4 depending on the compiler version (?)
Packit a4aae4
    }
Packit a4aae4
#endif
Packit a4aae4
Packit a4aae4
    void get_response_size_test_seq_c()
Packit a4aae4
    {
Packit a4aae4
        ConstraintEvaluator eval;
Packit a4aae4
        dds2->parse((string) TEST_SRC_DIR + "/dds-testsuite/S2000415.HDF.dds");
Packit a4aae4
        eval.parse_constraint("NSCAT%20Rev%2020.NSCAT%20L2.Low_Wind_Speed_Flag", *dds2);
Packit a4aae4
        DBG(cerr << "S2000415.HDF response size: " << dds2->get_request_size(true) << endl);
Packit a4aae4
        DBG(dds2->print_constrained(cerr));
Packit a4aae4
        CPPUNIT_ASSERT(dds2->get_request_size(true) == 4);
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
CPPUNIT_TEST_SUITE_REGISTRATION(DDSTest);
Packit a4aae4
Packit a4aae4
} // namespace libdap
Packit a4aae4
Packit a4aae4
int main(int argc, char *argv[])
Packit a4aae4
{
Packit a4aae4
    GetOpt getopt(argc, argv, "dh");
Packit a4aae4
    int option_char;
Packit a4aae4
Packit a4aae4
    while ((option_char = getopt()) != -1)
Packit a4aae4
        switch (option_char) {
Packit a4aae4
        case 'd':
Packit a4aae4
            debug = 1;  // debug is a static global
Packit a4aae4
            break;
Packit a4aae4
Packit a4aae4
        case 'h': {     // help - show test names
Packit a4aae4
            cerr << "Usage: DDSTest has the following tests:" << endl;
Packit a4aae4
            const std::vector<Test*> &tests = libdap::DDSTest::suite()->getTests();
Packit a4aae4
            unsigned int prefix_len = libdap::DDSTest::suite()->getName().append("::").length();
Packit a4aae4
            for (std::vector<Test*>::const_iterator i = tests.begin(), e = tests.end(); i != e; ++i) {
Packit a4aae4
                cerr << (*i)->getName().replace(0, prefix_len, "") << endl;
Packit a4aae4
            }
Packit a4aae4
            return 1;
Packit a4aae4
            break;
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
        default:
Packit a4aae4
            break;
Packit a4aae4
        }
Packit a4aae4
Packit a4aae4
    CppUnit::TextTestRunner runner;
Packit a4aae4
    runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
Packit a4aae4
Packit a4aae4
    bool wasSuccessful = true;
Packit a4aae4
    string test = "";
Packit a4aae4
    int i = getopt.optind;
Packit a4aae4
    if (i == argc) {
Packit a4aae4
        // run them all
Packit a4aae4
        wasSuccessful = runner.run("");
Packit a4aae4
    }
Packit a4aae4
    else {
Packit a4aae4
        for (; i < argc; ++i) {
Packit a4aae4
            if (debug) cerr << "Running " << argv[i] << endl;
Packit a4aae4
            test = libdap::DDSTest::suite()->getName().append("::").append(argv[i]);
Packit a4aae4
            wasSuccessful = wasSuccessful && runner.run(test);
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    return wasSuccessful ? 0 : 1;
Packit a4aae4
}
Packit a4aae4