Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Adam Osuchowski
Kea
Commits
3150e9c0
Commit
3150e9c0
authored
Mar 15, 2014
by
Marcin Siodelski
Browse files
[3360] Implemented class for writing/reading DHCPv6 leases from CSV.
parent
6199f3a5
Changes
10
Hide whitespace changes
Inline
Side-by-side
configure.ac
View file @
3150e9c0
...
...
@@ -1535,6 +1535,7 @@ AC_CONFIG_FILES([compatcheck/Makefile
src/lib/dhcpsrv/Makefile
src/lib/dhcpsrv/tests/Makefile
src/lib/dhcpsrv/tests/test_libraries.h
srv/lib/dhcpsrv/tests/testdata/Makefile
src/lib/dhcp/tests/Makefile
src/lib/dns/benchmarks/Makefile
src/lib/dns/gen-rdatacode.py
...
...
src/lib/dhcpsrv/Makefile.am
View file @
3150e9c0
...
...
@@ -39,6 +39,7 @@ libb10_dhcpsrv_la_SOURCES =
libb10_dhcpsrv_la_SOURCES
+=
addr_utilities.cc addr_utilities.h
libb10_dhcpsrv_la_SOURCES
+=
alloc_engine.cc alloc_engine.h
libb10_dhcpsrv_la_SOURCES
+=
callout_handle_store.h
libb10_dhcpsrv_la_SOURCES
+=
csv_lease_file6.cc csv_lease_file6.h
libb10_dhcpsrv_la_SOURCES
+=
d2_client_cfg.cc d2_client_cfg.h
libb10_dhcpsrv_la_SOURCES
+=
d2_client_mgr.cc d2_client_mgr.h
libb10_dhcpsrv_la_SOURCES
+=
dbaccess_parser.cc dbaccess_parser.h
...
...
src/lib/dhcpsrv/csv_lease_file6.cc
0 → 100644
View file @
3150e9c0
// Copyright (C) 2014 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
<dhcpsrv/csv_lease_file6.h>
using
namespace
isc
::
util
;
namespace
isc
{
namespace
dhcp
{
CSVLeaseFile6
::
CSVLeaseFile6
(
const
std
::
string
&
filename
)
:
CSVFile
(
filename
)
{
initColumns
();
}
void
CSVLeaseFile6
::
initColumns
()
{
addColumn
(
"address"
);
addColumn
(
"duid"
);
addColumn
(
"valid_lifetime"
);
addColumn
(
"expire"
);
addColumn
(
"subnet_id"
);
addColumn
(
"pref_lifetime"
);
addColumn
(
"lease_type"
);
addColumn
(
"iaid"
);
addColumn
(
"prefix_len"
);
addColumn
(
"fqdn_fwd"
);
addColumn
(
"fqdn_rev"
);
addColumn
(
"hostname"
);
}
void
CSVLeaseFile6
::
append
(
const
Lease6
&
lease
)
const
{
CSVRow
row
(
getColumnCount
());
row
.
writeAt
(
getColumnIndex
(
"address"
),
lease
.
addr_
.
toText
());
row
.
writeAt
(
getColumnIndex
(
"duid"
),
lease
.
duid_
->
toText
());
row
.
writeAt
(
getColumnIndex
(
"valid_lifetime"
),
lease
.
valid_lft_
);
row
.
writeAt
(
getColumnIndex
(
"expire"
),
lease
.
cltt_
+
lease
.
valid_lft_
);
row
.
writeAt
(
getColumnIndex
(
"subnet_id"
),
lease
.
subnet_id_
);
row
.
writeAt
(
getColumnIndex
(
"pref_lifetime"
),
lease
.
preferred_lft_
);
row
.
writeAt
(
getColumnIndex
(
"lease_type"
),
lease
.
type_
);
row
.
writeAt
(
getColumnIndex
(
"iaid"
),
lease
.
iaid_
);
row
.
writeAt
(
getColumnIndex
(
"prefix_len"
),
static_cast
<
int
>
(
lease
.
prefixlen_
));
row
.
writeAt
(
getColumnIndex
(
"fqdn_fwd"
),
lease
.
fqdn_fwd_
);
row
.
writeAt
(
getColumnIndex
(
"fqdn_rev"
),
lease
.
fqdn_rev_
);
row
.
writeAt
(
getColumnIndex
(
"hostname"
),
lease
.
hostname_
);
CSVFile
::
append
(
row
);
}
}
// end of namespace isc::dhcp
}
// end of namespace isc
src/lib/dhcpsrv/csv_lease_file6.h
0 → 100644
View file @
3150e9c0
// Copyright (C) 2014 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.
#ifndef CSV_LEASE_FILE6_H
#define CSV_LEASE_FILE6_H
#include
<dhcpsrv/lease.h>
#include
<util/csv_file.h>
namespace
isc
{
namespace
dhcp
{
class
CSVLeaseFile6
:
public
isc
::
util
::
CSVFile
{
public:
CSVLeaseFile6
(
const
std
::
string
&
filename
);
void
append
(
const
Lease6
&
lease
)
const
;
private:
void
initColumns
();
};
}
// namespace isc::dhcp
}
// namespace isc
#endif // CSV_LEASE_FILE6_H
src/lib/dhcpsrv/tests/Makefile.am
View file @
3150e9c0
SUBDIRS
=
.
SUBDIRS
=
.
testdata
AM_CPPFLAGS
=
-I
$(top_builddir)
/src/lib
-I
$(top_srcdir)
/src/lib
AM_CPPFLAGS
+=
$(BOOST_INCLUDES)
AM_CPPFLAGS
+=
-DTEST_DATA_BUILDDIR
=
\"
$(abs_top_builddir)
/src/lib/dhcp/tests
\"
AM_CPPFLAGS
+=
-DDHCP_DATA_DIR
=
\"
$(abs_top_builddir)
/src/lib/dhcp/tests
\"
AM_CPPFLAGS
+=
-DTEST_DATA_BUILDDIR
=
\"
$(abs_top_builddir)
/src/lib/dhcp
srv
/tests
\"
AM_CPPFLAGS
+=
-DDHCP_DATA_DIR
=
\"
$(abs_top_builddir)
/src/lib/dhcp
srv
/tests
\"
AM_CPPFLAGS
+=
-DINSTALL_PROG
=
\"
$(abs_top_srcdir)
/install-sh
\"
AM_CXXFLAGS
=
$(B10_CXXFLAGS)
...
...
@@ -15,6 +15,9 @@ AM_CXXFLAGS = $(B10_CXXFLAGS)
AM_CXXFLAGS
+=
$(WARNING_NO_MISSING_FIELD_INITIALIZERS_CFLAG)
CLEANFILES
=
*
.gcno
*
.gcda
# CSV files are created by unit tests which check the CSVLeaseFile6
# and CSVLeaseFile4 classes.
CLEANFILES
+=
*
.csv
TESTS_ENVIRONMENT
=
\
$(LIBTOOL)
--mode
=
execute
$(VALGRIND_COMMAND)
...
...
@@ -56,9 +59,11 @@ libdhcpsrv_unittests_SOURCES += addr_utilities_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
alloc_engine_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
callout_handle_store_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
cfgmgr_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
csv_lease_file6_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
d2_client_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
d2_udp_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
dbaccess_parser_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
lease_file_io.cc lease_file_io.h
libdhcpsrv_unittests_SOURCES
+=
lease_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
lease_mgr_factory_unittest.cc
libdhcpsrv_unittests_SOURCES
+=
lease_mgr_unittest.cc
...
...
src/lib/dhcpsrv/tests/csv_lease_file6_unittest.cc
0 → 100644
View file @
3150e9c0
// Copyright (C) 2014 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
<config.h>
#include
<asiolink/io_address.h>
#include
<dhcpsrv/csv_lease_file6.h>
#include
<dhcpsrv/lease.h>
#include
<dhcpsrv/tests/lease_file_io.h>
#include
<boost/scoped_ptr.hpp>
#include
<gtest/gtest.h>
#include
<sstream>
using
namespace
isc
;
using
namespace
isc
::
asiolink
;
using
namespace
isc
::
dhcp
;
using
namespace
isc
::
dhcp
::
test
;
using
namespace
isc
::
util
;
namespace
{
const
uint8_t
DUID0
[]
=
{
0
,
1
,
2
,
3
,
4
,
5
,
6
,
0xa
,
0xb
,
0xc
,
0xd
,
0xe
,
0xf
};
const
uint8_t
DUID1
[]
=
{
1
,
1
,
1
,
1
,
0xa
,
1
,
2
,
3
,
4
,
5
};
class
CSVLeaseFile6Test
:
public
::
testing
::
Test
{
public:
CSVLeaseFile6Test
();
/// @brief Prepends the absolute path to the file specified
/// as an argument.
///
/// @param filename Name of the file.
/// @return Absolute path to the test file.
static
std
::
string
absolutePath
(
const
std
::
string
&
filename
);
DuidPtr
makeDUID
(
const
uint8_t
*
duid
,
const
unsigned
int
size
)
const
{
return
(
DuidPtr
(
new
DUID
(
duid
,
size
)));
}
std
::
string
filename_
;
LeaseFileIO
io_
;
};
CSVLeaseFile6Test
::
CSVLeaseFile6Test
()
:
filename_
(
absolutePath
(
"leases6.csv"
)),
io_
(
filename_
)
{
}
std
::
string
CSVLeaseFile6Test
::
absolutePath
(
const
std
::
string
&
filename
)
{
std
::
ostringstream
s
;
s
<<
TEST_DATA_BUILDDIR
<<
"/"
<<
filename
;
return
(
s
.
str
());
}
TEST_F
(
CSVLeaseFile6Test
,
recreate
)
{
boost
::
scoped_ptr
<
CSVLeaseFile6
>
lf
(
new
CSVLeaseFile6
(
filename_
));
ASSERT_NO_THROW
(
lf
->
recreate
());
ASSERT_TRUE
(
io_
.
exists
());
Lease6Ptr
lease
(
new
Lease6
(
Lease
::
TYPE_NA
,
IOAddress
(
"2001:db8:1::1"
),
makeDUID
(
DUID0
,
sizeof
(
DUID0
)),
7
,
100
,
200
,
50
,
80
,
8
,
true
,
true
,
"host.example.com"
));
lease
->
cltt_
=
0
;
ASSERT_NO_THROW
(
lf
->
append
(
*
lease
));
lease
.
reset
(
new
Lease6
(
Lease
::
TYPE_NA
,
IOAddress
(
"2001:db8:2::10"
),
makeDUID
(
DUID1
,
sizeof
(
DUID1
)),
8
,
150
,
300
,
40
,
70
,
6
,
false
,
false
,
""
,
128
));
lease
->
cltt_
=
0
;
ASSERT_NO_THROW
(
lf
->
append
(
*
lease
));
lease
.
reset
(
new
Lease6
(
Lease
::
TYPE_PD
,
IOAddress
(
"3000:1:1::"
),
makeDUID
(
DUID0
,
sizeof
(
DUID0
)),
7
,
150
,
300
,
40
,
70
,
10
,
false
,
false
,
""
,
64
));
lease
->
cltt_
=
0
;
ASSERT_NO_THROW
(
lf
->
append
(
*
lease
));
EXPECT_EQ
(
"address,duid,valid_lifetime,expire,subnet_id,pref_lifetime,"
"lease_type,iaid,prefix_len,fqdn_fwd,fqdn_rev,hostname
\n
"
"2001:db8:1::1,00:01:02:03:04:05:06:0a:0b:0c:0d:0e:0f,"
"200,200,8,100,0,7,0,1,1,host.example.com
\n
"
"2001:db8:2::10,01:01:01:01:0a:01:02:03:04:05"
",300,300,6,150,0,8,128,0,0,
\n
"
"3000:1:1::,00:01:02:03:04:05:06:0a:0b:0c:0d:0e:0f,"
"300,300,10,150,2,7,64,0,0,
\n
"
,
io_
.
readFile
());
}
}
// end of anonymous namespace
src/lib/dhcpsrv/tests/lease_file_io.cc
0 → 100644
View file @
3150e9c0
// Copyright (C) 2014 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
<dhcpsrv/tests/lease_file_io.h>
#include
<fstream>
#include
<sstream>
namespace
isc
{
namespace
dhcp
{
namespace
test
{
LeaseFileIO
::
LeaseFileIO
(
const
std
::
string
&
filename
)
:
testfile_
(
filename
)
{
removeFile
();
}
LeaseFileIO
::~
LeaseFileIO
()
{
// removeFile();
}
bool
LeaseFileIO
::
exists
()
const
{
std
::
ifstream
fs
(
testfile_
.
c_str
());
bool
ok
=
fs
.
good
();
fs
.
close
();
return
(
ok
);
}
std
::
string
LeaseFileIO
::
readFile
()
const
{
std
::
ifstream
fs
(
testfile_
.
c_str
());
if
(
!
fs
.
is_open
())
{
return
(
""
);
}
std
::
string
contents
((
std
::
istreambuf_iterator
<
char
>
(
fs
)),
std
::
istreambuf_iterator
<
char
>
());
fs
.
close
();
return
(
contents
);
}
void
LeaseFileIO
::
removeFile
()
const
{
remove
(
testfile_
.
c_str
());
}
void
LeaseFileIO
::
writeFile
(
const
std
::
string
&
contents
)
const
{
std
::
ofstream
fs
(
testfile_
.
c_str
(),
std
::
ofstream
::
out
);
if
(
fs
.
is_open
())
{
fs
<<
contents
;
fs
.
close
();
}
}
}
// end of namespace isc::dhcp::test
}
// end of namespace isc::dhcp
}
// end of namespace isc
src/lib/dhcpsrv/tests/lease_file_io.h
0 → 100644
View file @
3150e9c0
// Copyright (C) 2014 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.
#ifndef LEASE_FILE_IO_H
#define LEASE_FILE_IO_H
#include
<string>
namespace
isc
{
namespace
dhcp
{
namespace
test
{
class
LeaseFileIO
{
public:
LeaseFileIO
(
const
std
::
string
&
filename
);
~
LeaseFileIO
();
/// @brief Check if test file exists on disk.
bool
exists
()
const
;
/// @brief Reads whole lease file.
///
/// @return Contents of the file.
std
::
string
readFile
()
const
;
/// @brief Removes existing file (if any).
void
removeFile
()
const
;
/// @brief Creates file with contents.
///
/// @param contents Contents of the file.
void
writeFile
(
const
std
::
string
&
contents
)
const
;
/// @brief Absolute path to the file used in the tests.
std
::
string
testfile_
;
};
}
}
}
#endif // LEASE_FILE_IO_H
src/lib/dhcpsrv/tests/testdata/Makefile.am
0 → 100644
View file @
3150e9c0
SUBDIRS
=
.
EXTRA_DIST
=
leases6_0.csv
src/lib/dhcpsrv/tests/testdata/leases6_0.csv
0 → 100644
View file @
3150e9c0
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment