Skip to content

Commit

Permalink
Merge pull request #23 from Worteks/redis-doc-test
Browse files Browse the repository at this point in the history
Redis: doc and tests improvements
  • Loading branch information
coudot authored Jan 21, 2020
2 parents a73cadd + 3b42351 commit e0f5577
Show file tree
Hide file tree
Showing 2 changed files with 126 additions and 4 deletions.
8 changes: 6 additions & 2 deletions lib/Apache/Session/Browseable/Redis.pm
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,9 @@ Apache::Session::Redis
my $args = {
server => '127.0.0.1:6379',
# Select database (optional)
#database => 0,
# Choose your browseable fileds
Index => 'uid mail',
};
Expand All @@ -181,14 +184,15 @@ Apache::Session::Redis
# 2) Parse all sessions
# a. get all sessions
my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions();
my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions($args);
# b. get some fields from all sessions
my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions('uid', 'mail')
my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions($args, 'uid', 'mail')
# c. execute something with datas from each session :
# Example : get uid and mail if mail domain is
my $hash = Apache::Session::Browseable::Redis->get_key_from_all_sessions(
$args,
sub {
my ( $session, $id ) = @_;
if ( $session->{mail} =~ /mydomain.com$/ ) {
Expand Down
122 changes: 120 additions & 2 deletions t/Apache-Session-Browseable-Redis.t
Original file line number Diff line number Diff line change
@@ -1,13 +1,131 @@
use Test::More;
use JSON qw/from_json/;
use utf8;

our $test_dburl = $ENV{REDIS_URL} || 'localhost:6379';
our $test_dbnum = $ENV{REDIS_DBNUM} || 15;
our $r; # Redis handle used for asserts

plan skip_all => "Optional modules (Redis) not installed"
unless eval { require Redis; };

plan skip_all => "Redis error : $@"
unless eval {
require Redis;
$r = Redis->new( server => $test_dburl );
$r->select($test_dbnum);
$r->flushall();
};

plan tests => 1;
plan tests => 19;

$package = 'Apache::Session::Browseable::Redis';

use_ok($package);

my $args = {
server => $test_dburl,
database => $test_dbnum,

# Choose your browseable fileds
Index => 'uid sn mail',
};

use Data::Dumper;
my $id;
my $json;

is( keys %{ $r->keys('*') }, 0, "Make sure database is empty" );

# Create new session
my %session;
tie %session, 'Apache::Session::Browseable::Redis', $id, $args;
$session{uid} = '';
$session{mail} = 'mé@me.com';
$session{color} = 'zz';
$id = $session{_session_id};
untie %session;

# Make sure it was stored:
ok( $r->exists($id), "Test if new session id exists as a key in Redis" );
ok( $r->exists("uid_mé"), "Test if index exists" );
ok( $json = from_json( $r->get($id) ), "Parse redis value as JSON" );
is( $json->{mail}, 'mé@me.com',
"Test if session subkey was correctly stored" );

# Read existing session
tie %session, 'Apache::Session::Browseable::Redis', $id, $args;
is( $session{mail}, 'mé@me.com', "Test if session subkey can be read" );

# Delete session;
tied(%session)->delete;

ok( !$r->exists($id), "Test if new session id was removed" );
ok( !$r->exists("uid_mé"), "Test if index was removed" );

is( keys %{ $r->keys('*') }, 0, "Make sure database is empty after removal" );
untie %session;

# Create a bunch of sessions to search on
my %session1, %session2, %session3, %session4, %session5;
my $id1, $id2, $id3, $id4, $id5;

tie %session1, 'Apache::Session::Browseable::Redis', undef, $args;
$session1{uid} = 'obiwan';
$session1{sn} = 'Kenobi';
$session1{color} = 'blue';
$id1 = $session1{_session_id};
untie %session1;

tie %session2, 'Apache::Session::Browseable::Redis', undef, $args;
$session2{uid} = 'darthvader';
$session2{sn} = 'Skywalker';
$session2{color} = 'red';
$id2 = $session2{_session_id};
untie %session2;

tie %session3, 'Apache::Session::Browseable::Redis', undef, $args;
$session3{uid} = 'luke';
$session3{sn} = 'Skywalker';
$session3{color} = 'green';
$id3 = $session3{_session_id};
untie %session3;

tie %session4, 'Apache::Session::Browseable::Redis', undef, $args;
$session4{uid} = 'mace';
$session4{sn} = 'Windu';
$session4{color} = 'purple';
$id4 = $session4{_session_id};
untie %session4;

tie %session5, 'Apache::Session::Browseable::Redis', undef, $args;
$session5{uid} = 'yoda';
$session5{sn} = 'Yoda';
$session5{color} = 'green';
$id5 = $session5{_session_id};
untie %session5;

# Search all keys

my $hash =
Apache::Session::Browseable::Redis->get_key_from_all_sessions( $args, "uid" );

is( keys %$hash, 5, "Found all 5 session" );
ok( exists( $hash->{$id4} ), "Found 'mace' in result" );
is( $hash->{$id4}->{uid}, 'mace', "Correct value in session 4" );

# Search on indexed field
my $hash =
Apache::Session::Browseable::Redis->searchOn( $args, 'sn', 'Skywalker' );

is( keys %$hash, 2, "Found 2 session" );
is( $hash->{$id2}->{uid}, 'darthvader', "Correct value" );
is( $hash->{$id3}->{uid}, 'luke', "Correct value" );

# Search on unindexed field
my $hash =
Apache::Session::Browseable::Redis->searchOn( $args, 'color', 'green' );
is( keys %$hash, 2, "Found 2 session" );
is( $hash->{$id3}->{uid}, 'luke', "Correct value" );
is( $hash->{$id5}->{uid}, 'yoda', "Correct value" );

$r->flushall;

0 comments on commit e0f5577

Please sign in to comment.