Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Open sidebar
ISC Open Source Projects
Kea
Commits
68953b80
Commit
68953b80
authored
Oct 17, 2012
by
Stephen Morris
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[2342] Got the basic "open database" test working.
parent
6b45e5c0
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
114 additions
and
23 deletions
+114
-23
src/lib/dhcp/lease_mgr.h
src/lib/dhcp/lease_mgr.h
+1
-0
src/lib/dhcp/lease_mgr_factory.cc
src/lib/dhcp/lease_mgr_factory.cc
+4
-0
src/lib/dhcp/mysql_lease_mgr.cc
src/lib/dhcp/mysql_lease_mgr.cc
+72
-3
src/lib/dhcp/mysql_lease_mgr.h
src/lib/dhcp/mysql_lease_mgr.h
+28
-17
src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc
src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc
+9
-3
No files found.
src/lib/dhcp/lease_mgr.h
View file @
68953b80
...
...
@@ -63,6 +63,7 @@ namespace dhcp {
/// @brief Exception thrown on failure to open database
class
DbOpenError
:
public
Exception
{
public:
DbOpenError
(
const
char
*
file
,
size_t
line
,
const
char
*
what
)
:
isc
::
Exception
(
file
,
line
,
what
)
{}
};
...
...
src/lib/dhcp/lease_mgr_factory.cc
View file @
68953b80
...
...
@@ -14,6 +14,10 @@
#include "config.h"
// TEMP
#define HAVE_MYSQL 1
#include <algorithm>
#include <iostream>
#include <iterator>
...
...
src/lib/dhcp/mysql_lease_mgr.cc
View file @
68953b80
...
...
@@ -12,27 +12,96 @@
// OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
// PERFORMANCE OF THIS SOFTWARE.
#include <iostream>
#include <iomanip>
#include <string>
#include <config.h>
#include <dhcp/mysql_lease_mgr.h>
using
namespace
std
;
namespace
isc
{
namespace
dhcp
{
void
MySqlLeaseMgr
::
openDatabase
()
{
// Set up the values of the parameters
const
char
*
host
=
NULL
;
string
shost
;
try
{
shost
=
getParameter
(
"host"
);
host
=
shost
.
c_str
();
}
catch
(...)
{
// No host. Fine, we'll use NULL
;
}
const
char
*
user
=
NULL
;
string
suser
;
try
{
suser
=
getParameter
(
"user"
);
user
=
suser
.
c_str
();
}
catch
(...)
{
// No user. Fine, we'll use NULL
;
}
const
char
*
password
=
NULL
;
string
spassword
;
try
{
spassword
=
getParameter
(
"password"
);
password
=
spassword
.
c_str
();
}
catch
(...)
{
// No password. Fine, we'll use NULL
;
}
const
char
*
name
=
NULL
;
string
sname
;
try
{
sname
=
getParameter
(
"name"
);
name
=
sname
.
c_str
();
}
catch
(...)
{
// No database name. Fine, we'll use NULL
;
}
// Open the database. Use defaults for non-specified options.
MYSQL
*
status
=
mysql_real_connect
(
mysql_
,
host
,
user
,
password
,
name
,
0
,
NULL
,
0
);
if
(
status
!=
mysql_
)
{
isc_throw
(
DbOpenError
,
mysql_error
(
mysql_
));
}
}
MySqlLeaseMgr
::
MySqlLeaseMgr
(
const
LeaseMgr
::
ParameterMap
&
parameters
)
:
LeaseMgr
(
parameters
),
major_
(
0
),
minor_
(
0
)
{
:
LeaseMgr
(
parameters
),
mysql_
(
NULL
),
major_
(
0
),
minor_
(
0
)
{
// Allocate context for MySQL - it is destroyed in the destructor.
mysql_
=
mysql_init
(
NULL
);
std
::
cerr
<<
"cerr: mysql_ is "
<<
long
(
mysql_
)
<<
std
::
endl
;
std
::
cout
<<
"cout: mysql_ is "
<<
long
(
mysql_
)
<<
std
::
endl
;
// Open the database
openDatabase
();
}
MySqlLeaseMgr
::~
MySqlLeaseMgr
()
{
mysql_close
(
mysql_
);
mysql_
=
NULL
;
}
bool
MySqlLeaseMgr
::
addLease
(
Lease4Ptr
/* lease */
)
{
MySqlLeaseMgr
::
addLease
(
isc
::
dhcp
::
Lease4Ptr
/* lease */
)
{
return
(
false
);
}
bool
MySqlLeaseMgr
::
addLease
(
Lease6Ptr
/* lease */
)
{
MySqlLeaseMgr
::
addLease
(
isc
::
dhcp
::
Lease6Ptr
/* lease */
)
{
return
(
false
);
}
...
...
src/lib/dhcp/mysql_lease_mgr.h
View file @
68953b80
...
...
@@ -15,6 +15,7 @@
#ifndef __MYSQL_LEASE_MGR_H
#define __MYSQL_LEASE_MGR_H
#include <mysql.h>
#include <dhcp/lease_mgr.h>
namespace
isc
{
...
...
@@ -50,12 +51,12 @@ public:
/// @brief Adds an IPv4 lease.
///
/// @param lease lease to be added
virtual
bool
addLease
(
Lease4Ptr
lease
)
=
0
;
virtual
bool
addLease
(
Lease4Ptr
lease
);
/// @brief Adds an IPv6 lease.
///
/// @param lease lease to be added
virtual
bool
addLease
(
Lease6Ptr
lease
)
=
0
;
virtual
bool
addLease
(
Lease6Ptr
lease
);
/// @brief Returns existing IPv4 lease for specified IPv4 address and subnet_id
///
...
...
@@ -68,7 +69,7 @@ public:
///
/// @return smart pointer to the lease (or NULL if a lease is not found)
virtual
Lease4Ptr
getLease4
(
isc
::
asiolink
::
IOAddress
addr
,
SubnetID
subnet_id
)
const
=
0
;
SubnetID
subnet_id
)
const
;
/// @brief Returns an IPv4 lease for specified IPv4 address
///
...
...
@@ -83,7 +84,7 @@ public:
/// @param subnet_id ID of the subnet the lease must belong to
///
/// @return smart pointer to the lease (or NULL if a lease is not found)
virtual
Lease4Ptr
getLease4
(
isc
::
asiolink
::
IOAddress
addr
)
const
=
0
;
virtual
Lease4Ptr
getLease4
(
isc
::
asiolink
::
IOAddress
addr
)
const
;
/// @brief Returns existing IPv4 leases for specified hardware address.
///
...
...
@@ -95,7 +96,7 @@ public:
/// @param hwaddr hardware address of the client
///
/// @return lease collection
virtual
Lease4Collection
getLease4
(
const
HWAddr
&
hwaddr
)
const
=
0
;
virtual
Lease4Collection
getLease4
(
const
HWAddr
&
hwaddr
)
const
;
/// @brief Returns existing IPv4 leases for specified hardware address
/// and a subnet
...
...
@@ -108,7 +109,7 @@ public:
///
/// @return a pointer to the lease (or NULL if a lease is not found)
virtual
Lease4Ptr
getLease4
(
const
HWAddr
&
hwaddr
,
SubnetID
subnet_id
)
const
=
0
;
SubnetID
subnet_id
)
const
;
/// @brief Returns existing IPv4 lease for specified client-id
///
...
...
@@ -120,7 +121,7 @@ public:
/// @param clientid client identifier
///
/// @return lease collection
virtual
Lease4Collection
getLease4
(
const
ClientId
&
clientid
)
const
=
0
;
virtual
Lease4Collection
getLease4
(
const
ClientId
&
clientid
)
const
;
/// @brief Returns existing IPv4 lease for specified client-id
///
...
...
@@ -132,7 +133,7 @@ public:
///
/// @return a pointer to the lease (or NULL if a lease is not found)
virtual
Lease4Ptr
getLease4
(
const
ClientId
&
clientid
,
SubnetID
subnet_id
)
const
=
0
;
SubnetID
subnet_id
)
const
;
/// @brief Returns existing IPv6 lease for a given IPv6 address.
///
...
...
@@ -143,7 +144,7 @@ public:
/// @param addr address of the searched lease
///
/// @return smart pointer to the lease (or NULL if a lease is not found)
virtual
Lease6Ptr
getLease6
(
isc
::
asiolink
::
IOAddress
addr
)
const
=
0
;
virtual
Lease6Ptr
getLease6
(
isc
::
asiolink
::
IOAddress
addr
)
const
;
/// @brief Returns existing IPv6 leases for a given DUID+IA combination
///
...
...
@@ -157,7 +158,7 @@ public:
///
/// @return smart pointer to the lease (or NULL if a lease is not found)
virtual
Lease6Collection
getLease6
(
const
DUID
&
duid
,
uint32_t
iaid
)
const
=
0
;
uint32_t
iaid
)
const
;
/// @brief Returns existing IPv6 lease for a given DUID+IA combination
///
...
...
@@ -167,45 +168,45 @@ public:
///
/// @return smart pointer to the lease (or NULL if a lease is not found)
virtual
Lease6Ptr
getLease6
(
const
DUID
&
duid
,
uint32_t
iaid
,
SubnetID
subnet_id
)
const
=
0
;
SubnetID
subnet_id
)
const
;
/// @brief Updates IPv4 lease.
///
/// @param lease4 The lease to be updated.
///
/// If no such lease is present, an exception will be thrown.
virtual
void
updateLease4
(
Lease4Ptr
lease4
)
=
0
;
virtual
void
updateLease4
(
Lease4Ptr
lease4
);
/// @brief Updates IPv4 lease.
///
/// @param lease4 The lease to be updated.
///
/// If no such lease is present, an exception will be thrown.
virtual
void
updateLease6
(
Lease6Ptr
lease6
)
=
0
;
virtual
void
updateLease6
(
Lease6Ptr
lease6
);
/// @brief Deletes a lease.
///
/// @param addr IPv4 address of the lease to be deleted.
///
/// @return true if deletion was successful, false if no such lease exists
virtual
bool
deleteLease4
(
uint32_t
addr
)
=
0
;
virtual
bool
deleteLease4
(
uint32_t
addr
);
/// @brief Deletes a lease.
///
/// @param addr IPv4 address of the lease to be deleted.
///
/// @return true if deletion was successful, false if no such lease exists
virtual
bool
deleteLease6
(
isc
::
asiolink
::
IOAddress
addr
)
=
0
;
virtual
bool
deleteLease6
(
isc
::
asiolink
::
IOAddress
addr
);
/// @brief Returns backend name.
///
/// Each backend have specific name, e.g. "mysql" or "sqlite".
virtual
std
::
string
getName
()
const
=
0
;
virtual
std
::
string
getName
()
const
;
/// @brief Returns description of the backend.
///
/// This description may be multiline text that describes the backend.
virtual
std
::
string
getDescription
()
const
=
0
;
virtual
std
::
string
getDescription
()
const
;
/// @brief Returns backend version.
///
...
...
@@ -224,6 +225,16 @@ public:
virtual
std
::
pair
<
uint32_t
,
uint32_t
>
getVersion
()
const
;
private:
/// @brief Open Database
///
/// Opens the database using the information supplied in the parameters
/// passed to the constructor.
///
/// @exception DbOpenError Error opening the database
void
openDatabase
();
// Members
MYSQL
*
mysql_
;
///< MySQL context object
uint32_t
major_
;
///< Major version number
uint32_t
minor_
;
///< Minor version number
};
...
...
src/lib/dhcp/tests/mysql_lease_mgr_unittest.cc
View file @
68953b80
...
...
@@ -38,7 +38,7 @@ public:
// Connection strings
const
char
*
VALID_TYPE
=
"type=mysql"
;
const
char
*
INVALID_TYPE
=
"type=unknown"
;
const
char
*
VALID_NAME
=
"name=keat
t
est"
;
const
char
*
VALID_NAME
=
"name=keatest"
;
const
char
*
INVALID_NAME
=
"name=invalidname"
;
const
char
*
VALID_HOST
=
"host=localhost"
;
const
char
*
INVALID_HOST
=
"host=invalidhost"
;
...
...
@@ -70,10 +70,14 @@ string validConnectionString() {
TEST_F
(
MySqlLeaseMgrTest
,
OpenDatabase
)
{
LeaseMgrPtr
lmptr
;
// Check that failure to open the database generates an exception
// Check that wrong specification of backend throws an exception.
// (This is really a check on LeaseMgrFactory, but is convenient to
// perform here.)
EXPECT_THROW
(
lmptr
=
LeaseMgrFactory
::
create
(
connectionString
(
INVALID_TYPE
,
VALID_NAME
,
VALID_HOST
,
VALID_USER
,
VALID_PASSWORD
)),
InvalidType
);
InvalidParameter
);
// Check that invalid login data causes an exception.
EXPECT_THROW
(
lmptr
=
LeaseMgrFactory
::
create
(
connectionString
(
VALID_TYPE
,
INVALID_NAME
,
VALID_HOST
,
VALID_USER
,
VALID_PASSWORD
)),
DbOpenError
);
...
...
@@ -92,9 +96,11 @@ TEST_F(MySqlLeaseMgrTest, OpenDatabase) {
VALID_TYPE
,
VALID_NAME
,
VALID_HOST
,
VALID_USER
,
VALID_PASSWORD
)));
ASSERT_TRUE
(
lmptr
);
/*
pair<uint32_t, uint32_t> version = lmptr->getVersion();
EXPECT_EQ(0, version.first);
EXPECT_EQ(1, version.second);
*/
}
};
// end of anonymous namespace
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a 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