Blame unit-tests/chunked-io/test_text_file.txt.plain

Packit a4aae4
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) 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit a4aae4
//
Packit a4aae4
// You can contact OPeNDAP, Inc. at PO Box 112, Saunderstown, RI. 02874-0112.
Packit a4aae4
Packit a4aae4
// Tests for the AISMerge class.
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
//#define DODS_DEBUG
Packit a4aae4
Packit a4aae4
#include "Connect.h"
Packit a4aae4
#include "AISMerge.h"
Packit a4aae4
#include "debug.h"
Packit a4aae4
#include <test_config.h>
Packit a4aae4
Packit a4aae4
#include "testFile.h"
Packit a4aae4
Packit a4aae4
using namespace CppUnit;
Packit a4aae4
Packit a4aae4
namespace libdap
Packit a4aae4
{
Packit a4aae4
Packit a4aae4
class AISMergeTest:public TestFixture {
Packit a4aae4
  private:
Packit a4aae4
    AISMerge * ais_merge;
Packit a4aae4
Packit a4aae4
    static string fnoc1, fnoc2, fnoc3, bears, coads, three_fnoc;
Packit a4aae4
    static string fnoc1_ais, fnoc2_ais, digit_ais, fnoc3_das;
Packit a4aae4
Packit a4aae4
    static string fnoc1_ais_string, bears_1_ais_string, coads_ais_string;
Packit a4aae4
    static string fnoc1_merge_ais, fnoc2_merge_ais, fnoc3_merge_ais;
Packit a4aae4
    static string three_fnoc_merge_ais, starts_with_number_ais_string;
Packit a4aae4
Packit a4aae4
    string dump2string(FILE * res) {
Packit a4aae4
        string stuff = "";
Packit a4aae4
        char line[256];
Packit a4aae4
        while (!feof(res) && !ferror(res)
Packit a4aae4
               && fgets(&line[0], 256, res) != 0)
Packit a4aae4
             stuff += line;
Packit a4aae4
Packit a4aae4
         return stuff;
Packit a4aae4
  } public:
Packit a4aae4
     AISMergeTest() {
Packit a4aae4
    }
Packit a4aae4
    ~AISMergeTest() {
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void setUp() {
Packit a4aae4
        ais_merge = new AISMerge("ais_testsuite/ais_database.xml");
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void tearDown() {
Packit a4aae4
        delete ais_merge;
Packit a4aae4
        ais_merge = 0;
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST_SUITE(AISMergeTest);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST(get_ais_resource_test);
Packit a4aae4
    CPPUNIT_TEST(merge_test);
Packit a4aae4
Packit a4aae4
    CPPUNIT_TEST_SUITE_END();
Packit a4aae4
Packit a4aae4
    void get_ais_resource_test() {
Packit a4aae4
        try {
Packit a4aae4
            ResourceVector rv = ais_merge->d_ais_db.get_resource(fnoc1);
Packit a4aae4
            Response *res = ais_merge->get_ais_resource(rv[0].get_url());
Packit a4aae4
            string stuff = dump2string(res->get_stream());
Packit a4aae4
            DBG(cerr << "AIS Resource: " << stuff << endl);
Packit a4aae4
            CPPUNIT_ASSERT(stuff.find(fnoc1_ais_string)
Packit a4aae4
                           != string::npos);
Packit a4aae4
Packit a4aae4
            rv = ais_merge->d_ais_db.get_resource(coads);
Packit a4aae4
            res = ais_merge->get_ais_resource(rv[0].get_url());
Packit a4aae4
            CPPUNIT_ASSERT(dump2string(res->get_stream()).
Packit a4aae4
                           find(coads_ais_string)
Packit a4aae4
                           != string::npos);
Packit a4aae4
Packit a4aae4
            rv = ais_merge->d_ais_db.get_resource(three_fnoc);
Packit a4aae4
            res = ais_merge->get_ais_resource(rv[0].get_url());
Packit a4aae4
            CPPUNIT_ASSERT(dump2string(res->get_stream()).
Packit a4aae4
                           find(starts_with_number_ais_string)
Packit a4aae4
                           != string::npos);
Packit a4aae4
        }
Packit a4aae4
        catch(Error & e) {
Packit a4aae4
            cerr << "Error: " << e.get_error_message() << endl;
Packit a4aae4
            // If the exception is Not Found then this is not an error; there
Packit a4aae4
            // are many reasons why the resource might not be found...
Packit a4aae4
            if (e.get_error_message().find("Not Found:") == string::npos)
Packit a4aae4
                CPPUNIT_ASSERT(!"Error");
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
Packit a4aae4
    void merge_test() {
Packit a4aae4
        try {
Packit a4aae4
            Connect *conn;
Packit a4aae4
            DAS das;
Packit a4aae4
            string sof;
Packit a4aae4
Packit a4aae4
            conn = new Connect(fnoc1);  // test overwrite (default)
Packit a4aae4
            conn->request_das(das);
Packit a4aae4
            ais_merge->merge(fnoc1, das);
Packit a4aae4
            FILE2string(sof, of, das.print(of));
Packit a4aae4
            DBG(cerr << "Merged fnoc1 DAS: " << sof << endl);
Packit a4aae4
            CPPUNIT_ASSERT(sof.find(fnoc1_merge_ais) != string::npos);
Packit a4aae4
Packit a4aae4
            delete conn;
Packit a4aae4
            conn = 0;
Packit a4aae4
            das.erase();
Packit a4aae4
Packit a4aae4
            conn = new Connect(fnoc2);  // test replace
Packit a4aae4
            conn->request_das(das);
Packit a4aae4
            ais_merge->merge(fnoc2, das);
Packit a4aae4
            FILE2string(sof, of, das.print(of));
Packit a4aae4
            CPPUNIT_ASSERT(sof.find(fnoc2_merge_ais) != string::npos);
Packit a4aae4
Packit a4aae4
            delete conn;
Packit a4aae4
            conn = 0;
Packit a4aae4
            das.erase();
Packit a4aae4
Packit a4aae4
            conn = new Connect(fnoc3);  // test fallback
Packit a4aae4
            conn->request_das(das);     // with a non-empty das, nothing happens
Packit a4aae4
            ais_merge->merge(fnoc3, das);
Packit a4aae4
            FILE2string(sof, of, das.print(of));
Packit a4aae4
            CPPUNIT_ASSERT(sof.find(fnoc3_das) != string::npos);
Packit a4aae4
Packit a4aae4
            das.erase();        // empty das, should add attributes
Packit a4aae4
            ais_merge->merge(fnoc3, das);
Packit a4aae4
            FILE2string(sof, of, das.print(of));
Packit a4aae4
            CPPUNIT_ASSERT(sof.find(fnoc3_merge_ais) != string::npos);
Packit a4aae4
Packit a4aae4
            conn = new Connect(three_fnoc);     // test regexp
Packit a4aae4
            conn->request_das(das);     // with a non-empty das, nothing happens
Packit a4aae4
            ais_merge->merge(three_fnoc, das);
Packit a4aae4
            FILE2string(sof, of, das.print(of));
Packit a4aae4
            CPPUNIT_ASSERT(sof.find(three_fnoc_merge_ais)
Packit a4aae4
                           != string::npos);
Packit a4aae4
        }
Packit a4aae4
        catch(Error & e) {
Packit a4aae4
            cerr << "Error: " << e.get_error_message() << endl;
Packit a4aae4
            if (e.get_error_message().find("Not Found:") == string::npos)
Packit a4aae4
                CPPUNIT_ASSERT(!"Error");
Packit a4aae4
        }
Packit a4aae4
    }
Packit a4aae4
};
Packit a4aae4
Packit a4aae4
string AISMergeTest::fnoc1 =
Packit a4aae4
    "http://test.opendap.org/opendap/data/nc/fnoc1.nc";
Packit a4aae4
string AISMergeTest::fnoc2 =
Packit a4aae4
    "http://test.opendap.org/opendap/data/nc/fnoc2.nc";
Packit a4aae4
string AISMergeTest::fnoc3 =
Packit a4aae4
    "http://test.opendap.org/opendap/data/nc/fnoc3.nc";
Packit a4aae4
string AISMergeTest::bears =
Packit a4aae4
    "http://test.opendap.org/opendap/data/nc/bears.nc";
Packit a4aae4
string AISMergeTest::coads =
Packit a4aae4
    "http://test.opendap.org/opendap/data/nc/coads_climatology.nc";
Packit a4aae4
string AISMergeTest::three_fnoc =
Packit a4aae4
    "http://test.opendap.org/opendap/data/nc/3fnoc.nc";
Packit a4aae4
Packit a4aae4
string AISMergeTest::fnoc1_ais =
Packit a4aae4
    "http://test.opendap.org/ais/fnoc1.nc.das";
Packit a4aae4
string AISMergeTest::fnoc2_ais =
Packit a4aae4
    "http://test.opendap.org/ais/fnoc2.nc.das";
Packit a4aae4
string AISMergeTest::digit_ais = (string)TEST_SRC_DIR + "/ais_testsuite/starts_with_number.das";
Packit a4aae4
Packit a4aae4
string AISMergeTest::fnoc1_ais_string = "Attributes {\n\
Packit a4aae4
    u {\n\
Packit a4aae4
	String DODS_Name \"UWind\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    v {\n\
Packit a4aae4
	String DODS_Name \"VWind\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
}";
Packit a4aae4
Packit a4aae4
string AISMergeTest::bears_1_ais_string = "Attributes {\n\
Packit a4aae4
    bears {\n\
Packit a4aae4
	String longname \"Test data\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
}";
Packit a4aae4
Packit a4aae4
string AISMergeTest::coads_ais_string = "Attributes {\n\
Packit a4aae4
    COADSX {\n\
Packit a4aae4
        String long_name \"Longitude\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
}";
Packit a4aae4
Packit a4aae4
string AISMergeTest::starts_with_number_ais_string = "Attributes {\n\
Packit a4aae4
    NC_GLOBAL {\n\
Packit a4aae4
        String AIS_Test_info \"This dataset's name starts with a digit.\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
}";
Packit a4aae4
Packit a4aae4
string AISMergeTest::fnoc3_das = "Attributes {\n\
Packit a4aae4
    u {\n\
Packit a4aae4
        String units \"meter per second\";\n\
Packit a4aae4
        String long_name \"Vector wind eastward component\";\n\
Packit a4aae4
        String missing_value \"-32767\";\n\
Packit a4aae4
        String scale_factor \"0.005\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    v {\n\
Packit a4aae4
        String units \"meter per second\";\n\
Packit a4aae4
        String long_name \"Vector wind northward component\";\n\
Packit a4aae4
        String missing_value \"-32767\";\n\
Packit a4aae4
        String scale_factor \"0.005\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lat {\n\
Packit a4aae4
        String units \"degree North\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lon {\n\
Packit a4aae4
        String units \"degree East\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    time {\n\
Packit a4aae4
        String units \"hours from base_time\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    NC_GLOBAL {\n\
Packit a4aae4
        String base_time \"88-245-00:00:00\";\n\
Packit a4aae4
        String title \" FNOC UV wind components from 1988-245 to 1988-247.\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    DODS_EXTRA {\n\
Packit a4aae4
        String Unlimited_Dimension \"time_a\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
}";
Packit a4aae4
Packit a4aae4
string AISMergeTest::fnoc1_merge_ais = "Attributes {\n\
Packit a4aae4
    u {\n\
Packit a4aae4
        String units \"meter per second\";\n\
Packit a4aae4
        String long_name \"Vector wind eastward component\";\n\
Packit a4aae4
        String missing_value \"-32767\";\n\
Packit a4aae4
        String scale_factor \"0.005\";\n\
Packit a4aae4
        String DODS_Name \"UWind\", \"UWind\";\n\
Packit a4aae4
        Byte b 128;\n\
Packit a4aae4
        Int32 i 32000;\n\
Packit a4aae4
        Url WOA01 \"http://localhost/junk\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    v {\n\
Packit a4aae4
        String units \"meter per second\";\n\
Packit a4aae4
        String long_name \"Vector wind northward component\";\n\
Packit a4aae4
        String missing_value \"-32767\";\n\
Packit a4aae4
        String scale_factor \"0.005\";\n\
Packit a4aae4
        String DODS_Name \"VWind\", \"VWind\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lat {\n\
Packit a4aae4
        String units \"degree North\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lon {\n\
Packit a4aae4
        String units \"degree East\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    time {\n\
Packit a4aae4
        String units \"hours from base_time\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    NC_GLOBAL {\n\
Packit a4aae4
        String base_time \"88- 10-00:00:00\";\n\
Packit a4aae4
        String title \" FNOC UV wind components from 1988- 10 to 1988- 13.\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    DODS_EXTRA {\n\
Packit a4aae4
        String Unlimited_Dimension \"time_a\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
}";
Packit a4aae4
Packit a4aae4
string AISMergeTest::fnoc2_merge_ais = "Attributes {\n\
Packit a4aae4
    u {\n\
Packit a4aae4
        String units \"meter per second\";\n\
Packit a4aae4
        String long_name \"UWind\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    v {\n\
Packit a4aae4
        String units \"meter per second\";\n\
Packit a4aae4
        String long_name \"VWind\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lat {\n\
Packit a4aae4
        String units \"degree North\";\n\
Packit a4aae4
        String long_name \"Latitude\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lon {\n\
Packit a4aae4
        String units \"degree East\";\n\
Packit a4aae4
        String long_name \"Longitude\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    time {\n\
Packit a4aae4
    }\n\
Packit a4aae4
    NC_GLOBAL {\n\
Packit a4aae4
    }\n\
Packit a4aae4
    DODS_EXTRA {\n\
Packit a4aae4
    }\n\
Packit a4aae4
}";
Packit a4aae4
Packit a4aae4
string AISMergeTest::fnoc3_merge_ais = "Attributes {\n\
Packit a4aae4
    u {\n\
Packit a4aae4
        String long_name \"UWind\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    v {\n\
Packit a4aae4
        String long_name \"VWind\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lat {\n\
Packit a4aae4
        String long_name \"Latitude\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lon {\n\
Packit a4aae4
        String long_name \"Longitude\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
}";
Packit a4aae4
Packit a4aae4
string AISMergeTest::three_fnoc_merge_ais = "Attributes {\n\
Packit a4aae4
    u {\n\
Packit a4aae4
        String long_name \"UWind\", \"Vector wind eastward component\";\n\
Packit a4aae4
        String units \"meter per second\";\n\
Packit a4aae4
        String missing_value \"-32767\";\n\
Packit a4aae4
        String scale_factor \"0.005\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    v {\n\
Packit a4aae4
        String long_name \"VWind\", \"Vector wind northward component\";\n\
Packit a4aae4
        String units \"meter per second\";\n\
Packit a4aae4
        String missing_value \"-32767\";\n\
Packit a4aae4
        String scale_factor \"0.005\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lat {\n\
Packit a4aae4
        String long_name \"Latitude\";\n\
Packit a4aae4
        String units \"degree North\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    lon {\n\
Packit a4aae4
        String long_name \"Longitude\";\n\
Packit a4aae4
        String units \"degree East\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    time {\n\
Packit a4aae4
        String units \"hours from base_time\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    NC_GLOBAL {\n\
Packit a4aae4
        String base_time \"88-245-00:00:00\";\n\
Packit a4aae4
        String title \" FNOC UV wind components from 1988-245 to 1988-247.\";\n\
Packit a4aae4
        String AIS_Test_info \"This dataset's name starts with a digit.\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
    DODS_EXTRA {\n\
Packit a4aae4
        String Unlimited_Dimension \"time_a\";\n\
Packit a4aae4
    }\n\
Packit a4aae4
}";
Packit a4aae4
Packit a4aae4
CPPUNIT_TEST_SUITE_REGISTRATION(AISMergeTest);
Packit a4aae4
Packit a4aae4
} // namespace libdap
Packit a4aae4
Packit a4aae4
int main(int, char **)
Packit a4aae4
{
Packit a4aae4
    CppUnit::TextTestRunner runner;
Packit a4aae4
    runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
Packit a4aae4
Packit a4aae4
    bool wasSuccessful = runner.run("", false);
Packit a4aae4
Packit a4aae4
    return wasSuccessful ? 0 : 1;
Packit a4aae4
}
Packit a4aae4