Commit f33ffa77 authored by Michal 'vorner' Vaner's avatar Michal 'vorner' Vaner
Browse files

[trac1067] Interface and default for getIterator

The default throws isc::NotImplemented to allow data sources not
supporting this feature.
parent ac08c1b8
......@@ -16,12 +16,18 @@
#define __DATA_SOURCE_CLIENT_H 1
#include <boost/noncopyable.hpp>
#include <boost/shared_ptr.hpp>
#include <exceptions/exceptions.h>
#include <datasrc/zone.h>
namespace isc {
namespace datasrc {
class ZoneIterator;
typedef boost::shared_ptr<ZoneIterator> ZoneIteratorPtr;
/// \brief The base class of data source clients.
///
/// This is an abstract base class that defines the common interface for
......@@ -143,6 +149,35 @@ public:
/// \param name A domain name for which the search is performed.
/// \return A \c FindResult object enclosing the search result (see above).
virtual FindResult findZone(const isc::dns::Name& name) const = 0;
/// \brief Returns an iterator to the given zone
///
/// This allows for traversing the whole zone. The returned object can
/// provide the RRsets one by one.
///
/// This throws DataSourceError when the zone does not exist in the
/// datasource.
///
/// The default implementation throws isc::NotImplemented. This allows
/// for easy and fast deployment of minimal custom data sources, where
/// the user/implementator doesn't have to care about anything else but
/// the actual queries. Also, in some cases, it isn't possible to traverse
/// the zone from logic point of view (eg. dynamically generated zone
/// data).
///
/// It is not fixed if a concrete implementation of this method can throw
/// anything else.
///
/// \param name The name of zone apex to be traversed. It doesn't do
/// nearest match as findZone.
/// \return Pointer to the iterator.
virtual ZoneIteratorPtr getIterator(const isc::dns::Name& name) const {
// This is here to both document the parameter in doxygen (therefore it
// needs a name) and avoid unused parameter warning.
static_cast<void>(name);
isc_throw(isc::NotImplemented,
"Data source doesn't support iteration");
}
};
}
}
......
......@@ -30,6 +30,7 @@ run_unittests_SOURCES += memory_datasrc_unittest.cc
run_unittests_SOURCES += logger_unittest.cc
run_unittests_SOURCES += database_unittest.cc
run_unittests_SOURCES += sqlite3_connection_unittest.cc
run_unittests_SOURCES += client_unittest.cc
run_unittests_CPPFLAGS = $(AM_CPPFLAGS) $(GTEST_INCLUDES)
run_unittests_LDFLAGS = $(AM_LDFLAGS) $(GTEST_LDFLAGS)
......
// Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
//
// Permission to use, copy, modify, and/or distribute this software for any
// purpose with or without fee is hereby granted, provided that the above
// copyright notice and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
// AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
#include <datasrc/client.h>
#include <dns/name.h>
#include <gtest/gtest.h>
using namespace isc::datasrc;
using isc::dns::Name;
namespace {
/*
* The DataSourceClient can't be created as it has pure virtual methods.
* So we implement them as NOPs and test the other methods.
*/
class NopClient : public DataSourceClient {
public:
virtual FindResult findZone(const isc::dns::Name&) const {
return (FindResult(result::NOTFOUND, ZoneFinderPtr()));
}
};
class ClientTest : public ::testing::Test {
public:
NopClient client_;
};
// The default implementation is NotImplemented
TEST_F(ClientTest, defaultIterator) {
EXPECT_THROW(client_.getIterator(Name(".")), isc::NotImplemented);
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment