src/share/database/scripts/mysql/upgrade_4.0_to_4.1.sh
src/share/database/scripts/mysql/upgrade_4.1_to_5.0.sh
src/share/database/scripts/mysql/upgrade_5.0_to_5.1.sh
- src/share/database/scripts/mysql/upgrade_5.1_to_6.0.sh
+ src/share/database/scripts/mysql/upgrade_5.1_to_5.2.sh
+ src/share/database/scripts/mysql/upgrade_5.2_to_6.0.sh
src/share/database/scripts/pgsql/Makefile
src/share/database/scripts/pgsql/upgrade_1.0_to_2.0.sh
src/share/database/scripts/pgsql/upgrade_2.0_to_3.0.sh
src/share/database/scripts/pgsql/upgrade_3.0_to_3.1.sh
src/share/database/scripts/pgsql/upgrade_3.1_to_3.2.sh
- src/share/database/scripts/pgsql/upgrade_3.2_to_4.0.sh
+ src/share/database/scripts/pgsql/upgrade_3.2_to_3.3.sh
+ src/share/database/scripts/pgsql/upgrade_3.3_to_4.0.sh
tools/Makefile
tools/path_replacer.sh
])
assert_eq 0 $ERRCODE "select from host_identifier_type failed. (expected status code %d, returned %d)"
assert_eq 5 "$count" "host_identifier_type does not contain correct number of entries. (expected count %d, returned %d)"
- #table: user_context columns to hosts, dhcp4_options and dhcp6_options (upgrade 5.1 -> 6.0)
+ #table: user_context columns to hosts, dhcp4_options and dhcp6_options (upgrade 5.2 -> 6.0)
# verify that hosts table includes user_context
qry="select user_context from hosts";
count=`mysql_execute "${qry}"`
// and client's identifier. Left joining the dhcp4_options table results in
// multiple rows being returned for the same host.
{3,
- { OID_INT4, OID_INT2, OID_BYTEA },
+ { OID_INT8, OID_INT2, OID_BYTEA },
"get_host_subid4_dhcpid",
"SELECT h.host_id, h.dhcp_identifier, h.dhcp_identifier_type, "
" h.dhcp4_subnet_id, h.dhcp6_subnet_id, h.ipv4_address, h.hostname, "
// associated with a host. The number of rows returned is a multiplication
// of number of IPv6 reservations and DHCPv6 options.
{3,
- { OID_INT4, OID_INT2, OID_BYTEA },
+ { OID_INT8, OID_INT2, OID_BYTEA },
"get_host_subid6_dhcpid",
"SELECT h.host_id, h.dhcp_identifier, "
" h.dhcp_identifier_type, h.dhcp4_subnet_id, "
// results in multiple rows being returned for the host. The number of
// rows depends on the number of options defined for the host.
{2,
- { OID_INT4, OID_INT8 },
+ { OID_INT8, OID_INT8 },
"get_host_subid_addr",
"SELECT h.host_id, h.dhcp_identifier, h.dhcp_identifier_type, "
" h.dhcp4_subnet_id, h.dhcp6_subnet_id, h.ipv4_address, h.hostname, "
// The number of rows returned is multiplication of number of existing
// IPv6 reservations and DHCPv6 options.
{2,
- { OID_INT4, OID_VARCHAR },
+ { OID_INT8, OID_VARCHAR },
"get_host_subid6_addr",
"SELECT h.host_id, h.dhcp_identifier, "
" h.dhcp_identifier_type, h.dhcp4_subnet_id, "
// Inserts a host into the 'hosts' table. Returns the inserted host id.
{12,
{ OID_BYTEA, OID_INT2,
- OID_INT4, OID_INT4, OID_INT8, OID_VARCHAR,
+ OID_INT8, OID_INT8, OID_INT8, OID_VARCHAR,
OID_VARCHAR, OID_VARCHAR, OID_TEXT },
"insert_host",
"INSERT INTO hosts(dhcp_identifier, dhcp_identifier_type, "
// PgSqlHostDataSourceImpl::DEL_HOST_ADDR4
// Deletes a v4 host that matches (subnet-id, addr4)
{2,
- { OID_INT4, OID_INT8 },
+ { OID_INT8, OID_INT8 },
"del_host_addr4",
"DELETE FROM hosts WHERE dhcp4_subnet_id = $1 AND ipv4_address = $2"
},
// PgSqlHostDataSourceImpl::DEL_HOST_SUBID4_ID
// Deletes a v4 host that matches (subnet4-id, identifier-type, identifier)
{3,
- { OID_INT4, OID_INT2, OID_BYTEA },
+ { OID_INT8, OID_INT2, OID_BYTEA },
"del_host_subid4_id",
"DELETE FROM hosts WHERE dhcp4_subnet_id = $1 "
"AND dhcp_identifier_type = $2 "
// PgSqlHostDataSourceImpl::DEL_HOST_SUBID6_ID
// Deletes a v6 host that matches (subnet6-id, identifier-type, identifier)
{3,
- { OID_INT4, OID_INT2, OID_BYTEA },
+ { OID_INT8, OID_INT2, OID_BYTEA },
"del_host_subid6_id",
"DELETE FROM hosts WHERE dhcp6_subnet_id = $1 "
"AND dhcp_identifier_type = $2 "
#include <dhcpsrv/tests/generic_host_data_source_unittest.h>
#include <dhcpsrv/tests/test_utils.h>
#include <dhcpsrv/testutils/schema.h>
-
#include <boost/foreach.hpp>
#include <dhcpsrv/testutils/host_data_source_utils.h>
#include <gtest/gtest.h>
HostDataSourceUtils::compareHosts(host, from_hds);
}
+void
+GenericHostDataSourceTest::testMaxSubnetId4() {
+ std::vector<uint8_t> ident;
+
+ ident = HostDataSourceUtils::generateIdentifier();
+ SubnetID subnet_id4 = numeric_limits<uint32_t>::max();
+ HostPtr host(new Host(&ident[0], ident.size(), Host::IDENT_DUID,
+ subnet_id4, 0, IOAddress("0.0.0.0")));
+
+ ASSERT_NO_THROW(addTestOptions(host, true, DHCP4_ONLY));
+ ASSERT_NO_THROW(hdsptr_->add(host));
+
+ // get4(subnet_id, identifier_type, identifier, identifier_size)
+ ConstHostPtr host_by_id = hdsptr_->get4(subnet_id4,
+ host->getIdentifierType(),
+ &host->getIdentifier()[0],
+ host->getIdentifier().size());
+
+ ASSERT_NO_FATAL_FAILURE(HostDataSourceUtils::compareHosts(host, host_by_id));
+
+ // Now try to delete it: del4(subnet4-id, identifier-type, identifier)
+ EXPECT_TRUE(hdsptr_->del4(subnet_id4, Host::IDENT_DUID, &ident[0],
+ ident.size()));
+
+ host_by_id = hdsptr_->get4(subnet_id4, host->getIdentifierType(),
+ &host->getIdentifier()[0],
+ host->getIdentifier().size());
+
+ EXPECT_FALSE(host_by_id);
+}
+
+void GenericHostDataSourceTest::testMaxSubnetId6() {
+ std::vector<uint8_t> ident;
+
+ ident = HostDataSourceUtils::generateIdentifier();
+ SubnetID subnet_id6 = numeric_limits<uint32_t>::max();
+ HostPtr host(new Host(&ident[0], ident.size(), Host::IDENT_DUID,
+ 0, subnet_id6, IOAddress("0.0.0.0")));
+
+ ASSERT_NO_THROW(addTestOptions(host, true, DHCP6_ONLY));
+ ASSERT_NO_THROW(hdsptr_->add(host));
+
+ // get6(subnet_id, identifier_type, identifier, identifier_size)
+ ConstHostPtr host_by_id = hdsptr_->get6(subnet_id6,
+ host->getIdentifierType(),
+ &host->getIdentifier()[0],
+ host->getIdentifier().size());
+
+ ASSERT_NO_FATAL_FAILURE(HostDataSourceUtils::compareHosts(host, host_by_id));
+
+ // Now try to delete it: del6(subnet6-id, identifier-type, identifier)
+ EXPECT_TRUE(hdsptr_->del6(subnet_id6, Host::IDENT_DUID, &ident[0],
+ ident.size()));
+
+ host_by_id = hdsptr_->get4(subnet_id6, host->getIdentifierType(),
+ &host->getIdentifier()[0],
+ host->getIdentifier().size());
+
+ EXPECT_FALSE(host_by_id);
+}
+
void
GenericHostDataSourceTest::testGetByIPv4(const Host::IdentifierType& id) {
// Make sure we have a pointer to the host data source.
/// @param id Identifier type.
void testBasic4(const Host::IdentifierType& id);
+
+ /// @brief Test that Verifies that an IPv4 host reservation with
+ /// options can have a max value for dhcp4_subnet id
+ ///
+ /// Uses gtest macros to report failures.
+ void testMaxSubnetId4();
+
+ /// @brief Test that Verifies that an IPv6 host reservation with
+ /// options can have a max value for dhcp6_subnet id
+ ///
+ /// Uses gtest macros to report failures.
+ void testMaxSubnetId6();
+
/// @brief Test inserts several hosts with unique IPv4 address and
/// checks that they can be retrieved properly.
///
testBasic4(Host::IDENT_HWADDR);
}
+// Verifies that IPv4 host reservation with options can have a max value
+// for dhcp4_subnet id
+TEST_F(MySqlHostDataSourceTest, maxSubnetId4) {
+ testMaxSubnetId4();
+}
+
+// Verifies that IPv6 host reservation with options can have a max value
+// for dhcp6_subnet id
+TEST_F(MySqlHostDataSourceTest, maxSubnetId6) {
+ testMaxSubnetId6();
+}
+
// Test verifies if a host reservation can be added and later retrieved by IPv4
// address. Host uses client-id (DUID) as identifier.
TEST_F(MySqlHostDataSourceTest, basic4ClientId) {
testBasic4(Host::IDENT_HWADDR);
}
+// Verifies that IPv4 host reservation with options can have a max value
+// for dhcp4_subnet id
+TEST_F(PgSqlHostDataSourceTest, maxSubnetId4) {
+ testMaxSubnetId4();
+}
+
+// Verifies that IPv6 host reservation with options can have a max value
+// for dhcp6_subnet id
+TEST_F(PgSqlHostDataSourceTest, maxSubnetId6) {
+ testMaxSubnetId6();
+}
+
// Test verifies if a host reservation can be added and later retrieved by IPv4
// address. Host uses client-id (DUID) as identifier.
TEST_F(PgSqlHostDataSourceTest, basic4ClientId) {
/upgrade_4.0_to_4.1.sh
/upgrade_4.1_to_5.0.sh
/upgrade_5.0_to_5.1.sh
-/upgrade_5.1_to_6.0.sh
+/upgrade_5.1_to_5.2.sh
+/upgrade_5.2_to_6.0.sh
sqlscripts_DATA += upgrade_4.0_to_4.1.sh
sqlscripts_DATA += upgrade_4.1_to_5.0.sh
sqlscripts_DATA += upgrade_5.0_to_5.1.sh
-sqlscripts_DATA += upgrade_5.1_to_6.0.sh
+sqlscripts_DATA += upgrade_5.1_to_5.2.sh
+sqlscripts_DATA += upgrade_5.2_to_6.0.sh
DISTCLEANFILES = upgrade_1.0_to_2.0.sh
DISTCLEANFILES += upgrade_2.0_to_3.0.sh
DISTCLEANFILES += upgrade_4.0_to_4.1.sh
DISTCLEANFILES += upgrade_4.1_to_5.0.sh
DISTCLEANFILES += upgrade_5.0_to_5.1.sh
-DISTCLEANFILES += upgrade_5.1_to_6.0.sh
+DISTCLEANFILES += upgrade_5.1_to_5.2.sh
+DISTCLEANFILES += upgrade_5.2_to_6.0.sh
EXTRA_DIST = ${sqlscripts_DATA}
SET version = '5', minor = '1';
# This line concludes database upgrade to version 5.1.
+# Make subnet_id column types consistent with lease table columns
+ALTER TABLE dhcp4_options MODIFY dhcp4_subnet_id INT UNSIGNED;
+ALTER TABLE dhcp6_options MODIFY dhcp6_subnet_id INT UNSIGNED;
+
+# Update the schema version number
+UPDATE schema_version
+SET version = '5', minor = '2';
+
+# This line concludes database upgrade to version 5.2.
+
# Add user context into table holding hosts
ALTER TABLE hosts ADD COLUMN user_context TEXT NULL;
--- /dev/null
+#!/bin/sh
+
+# Include utilities. Use installed version if available and
+# use build version if it isn't.
+if [ -e @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh ]; then
+ . @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh
+else
+ . @abs_top_builddir@/src/bin/admin/admin-utils.sh
+fi
+
+VERSION=`mysql_version "$@"`
+
+if [ "$VERSION" != "5.1" ]; then
+ printf "This script upgrades 5.1 to 5.2. Reported version is $VERSION. Skipping upgrade.\n"
+ exit 0
+fi
+
+mysql "$@" <<EOF
+
+# Make subnet_id column types consistent with lease table columns
+ALTER TABLE dhcp4_options MODIFY dhcp4_subnet_id INT UNSIGNED;
+ALTER TABLE dhcp6_options MODIFY dhcp6_subnet_id INT UNSIGNED;
+
+# Update the schema version number
+UPDATE schema_version
+SET version = '5', minor = '2';
+# This line concludes database upgrade to version 5.2.
+
+EOF
+
+RESULT=$?
+
+exit $?
VERSION=`mysql_version "$@"`
-if [ "$VERSION" != "5.1" ]; then
- printf "This script upgrades 5.1 to 6.0. Reported version is $VERSION. Skipping upgrade.\n"
+if [ "$VERSION" != "5.2" ]; then
+ printf "This script upgrades 5.2 to 6.0. Reported version is $VERSION. Skipping upgrade.\n"
exit 0
fi
upgrade_2.0_to_3.0.sh
upgrade_3.0_to_3.1.sh
upgrade_3.1_to_3.2.sh
-upgrade_3.2_to_4.0.sh
+upgrade_3.2_to_3.3.sh
+upgrade_3.3_to_4.0.sh
sqlscripts_DATA += upgrade_2.0_to_3.0.sh
sqlscripts_DATA += upgrade_3.0_to_3.1.sh
sqlscripts_DATA += upgrade_3.1_to_3.2.sh
-sqlscripts_DATA += upgrade_3.2_to_4.0.sh
+sqlscripts_DATA += upgrade_3.2_to_3.3.sh
+sqlscripts_DATA += upgrade_3.3_to_4.0.sh
DISTCLEANFILES = upgrade_1.0_to_2.0.sh
DISTCLEANFILES += upgrade_2.0_to_3.0.sh
DISTCLEANFILES += upgrade_3.0_to_3.1.sh
DISTCLEANFILES += upgrade_3.1_to_3.2.sh
-DISTCLEANFILES += upgrade_3.2_to_4.0.sh
+DISTCLEANFILES += upgrade_3.2_to_3.3.sh
+DISTCLEANFILES += upgrade_3.3_to_4.0.sh
EXTRA_DIST = ${sqlscripts_DATA}
-- Schema 3.0 specification ends here.
+-- Upgrade to schema 3.1 begins here:
+
-- This is a placeholder for the changes between 3.0 and 3.1. We have added a
-- missing 'client-id' host reservation type entry that had been accidentally
-- omitted when the 2.0 -> 3.0 upgrade script was created.
UPDATE schema_version
SET version = '3', minor = '1';
--- Set 3.2 schema version.
+-- Schema 3.1 specification ends here.
+
+-- Upgrade to schema 3.2 begins here:
-- Remove constraints which perform too restrictive checks on the inserted
-- host reservations. We want to be able to insert host reservations which
UPDATE schema_version
SET version = '3', minor = '2';
--- Set 4.0 schema version.
+-- Schema 3.2 specification ends here.
+
+-- Upgrade to schema 3.3 begins here:
+
+-- Change subnet ID columns type to BIGINT to match lease4/6 tables
+ALTER TABLE hosts ALTER COLUMN dhcp4_subnet_id TYPE BIGINT;
+ALTER TABLE hosts ALTER COLUMN dhcp6_subnet_id TYPE BIGINT;
+
+ALTER TABLE dhcp4_options ALTER COLUMN dhcp4_subnet_id TYPE BIGINT;
+ALTER TABLE dhcp6_options ALTER COLUMN dhcp6_subnet_id TYPE BIGINT;
+
+-- Set 3.3 schema version.
+UPDATE schema_version
+ SET version = '3', minor = '3';
+
+-- Schema 3.3 specification ends here.
+
+-- Upgrade to schema 4.0 begins here:
-- Add a column holding hosts for user context.
ALTER TABLE hosts ADD COLUMN user_context TEXT;
UPDATE schema_version
SET version = '4', minor = '0';
+-- Schema 4.0 specification ends here.
+
-- Commit the script transaction.
COMMIT;
--- /dev/null
+#!/bin/sh
+
+# Include utilities. Use installed version if available and
+# use build version if it isn't.
+if [ -e @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh ]; then
+ . @datarootdir@/@PACKAGE_NAME@/scripts/admin-utils.sh
+else
+ . @abs_top_builddir@/src/bin/admin/admin-utils.sh
+fi
+
+VERSION=`pgsql_version "$@"`
+
+if [ "$VERSION" != "3.2" ]; then
+ printf "This script upgrades 3.2 to 3.3. Reported version is $VERSION. Skipping upgrade.\n"
+ exit 0
+fi
+
+psql "$@" >/dev/null <<EOF
+
+START TRANSACTION;
+
+-- Change subnet ID columns type to BIGINT to match lease4/6 tables
+ALTER TABLE hosts ALTER COLUMN dhcp4_subnet_id TYPE BIGINT;
+ALTER TABLE hosts ALTER COLUMN dhcp6_subnet_id TYPE BIGINT;
+
+ALTER TABLE dhcp4_options ALTER COLUMN dhcp4_subnet_id TYPE BIGINT;
+ALTER TABLE dhcp6_options ALTER COLUMN dhcp6_subnet_id TYPE BIGINT;
+
+-- Set 3.3 schema version.
+UPDATE schema_version
+ SET version = '3', minor = '3';
+
+-- Schema 3.3 specification ends here.
+
+-- Commit the script transaction
+COMMIT;
+
+EOF
+
+exit $RESULT
VERSION=`pgsql_version "$@"`
-if [ "$VERSION" != "3.2" ]; then
- printf "This script upgrades 3.2 to 4.0. Reported version is $VERSION. Skipping upgrade.\n"
+if [ "$VERSION" != "3.3" ]; then
+ printf "This script upgrades 3.3 to 4.0. Reported version is $VERSION. Skipping upgrade.\n"
exit 0
fi