From 64099c2ca348b61af03fb43673a3b8ff883ad5f2 Mon Sep 17 00:00:00 2001 From: Xavier Guimard Date: Mon, 11 Jan 2016 06:27:14 +0000 Subject: [PATCH] Change CDBI storage to JSON (#877) --- .../lib/Lemonldap/NG/Common/Conf/CDBI.pm | 12 +++++++++--- lemonldap-ng-common/t/03-Common-Conf-CDBI.t | 18 +++++++++--------- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/CDBI.pm b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/CDBI.pm index ed5e969bb..0bd5cb840 100644 --- a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/CDBI.pm +++ b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/CDBI.pm @@ -2,7 +2,7 @@ package Lemonldap::NG::Common::Conf::CDBI; use strict; use utf8; -require Storable; +use JSON::MaybeXS; use Lemonldap::NG::Common::Conf::_DBI; our $VERSION = '1.4.0'; @@ -14,7 +14,7 @@ sub store { my $req; my $lastCfg = $self->lastCfg; - $fields = Storable::nfreeze($fields); + $fields = encode_json($fields); if ( $lastCfg == $cfgNum ) { $req = $self->_dbh->prepare( @@ -46,7 +46,13 @@ sub load { return 0; } my $r; - eval { $r = Storable::thaw( $row->[0] ); }; + if ( $row->[0] =~ /^\s*\{/s ) { + eval { $r = decode_json( $row->[0] ); }; + } + else { # Old format + require Storable; + eval { $r = Storable::thaw( $row->[0] ); }; + } if ($@) { $Lemonldap::NG::Common::Conf::msg .= "Bad stored data in conf database: $@ \n"; diff --git a/lemonldap-ng-common/t/03-Common-Conf-CDBI.t b/lemonldap-ng-common/t/03-Common-Conf-CDBI.t index 90e195d6c..28ba16820 100644 --- a/lemonldap-ng-common/t/03-Common-Conf-CDBI.t +++ b/lemonldap-ng-common/t/03-Common-Conf-CDBI.t @@ -9,7 +9,6 @@ use strict; use Test::More; BEGIN { - use_ok('DBI'); use_ok('Lemonldap::NG::Common::Conf'); } @@ -21,21 +20,22 @@ BEGIN { my $h; @ARGV = ("help=groups"); unlink 't/lmConf.sql'; -my $count = 2; +my $count = 1; eval { require DBD::SQLite }; unless ($@) { - require DBI; - my $dbh = DBI->connect( "dbi:SQLite:dbname=t/lmConf.sql", '', '', {AutoCommit=>1} ); + use_ok('DBI'); + my $dbh = DBI->connect( "dbi:SQLite:dbname=t/lmConf.sql", + '', '', { AutoCommit => 1 } ); $dbh->{sqlite_unicode} = 1; ok( $dbh->do( -' CREATE TABLE lmConfig ( cfgNum int not null primary key, data longblob)' +' CREATE TABLE lmConfig ( cfgNum int not null primary key, data text)' ), - 'Database created' + 'Test database created' ); undef $dbh; - $count++; + $count += 2; ok( $h = new Lemonldap::NG::Common::Conf( @@ -66,11 +66,11 @@ unless ($@) { ); for ( my $i = 0 ; $i < @test ; $i++ ) { - ok( $h->store( $test[$i] ) == $i+1, "Test $i is stored" ) + ok( $h->store( $test[$i] ) == $i + 1, "Test $i is stored" ) or print STDERR "$Lemonldap::NG::Common::Conf::msg $!"; $count++; my $cfg; - ok( $cfg = $h->load($i+1), "Test $i can be read" ) + ok( $cfg = $h->load( $i + 1 ), "Test $i can be read" ) or print STDERR $Lemonldap::NG::Common::Conf::msg; ok( $cfg->{test} eq $test[$i]->{test}, "Test $i is restored" ); $count += 2;