Skip to content

Commit

Permalink
fixed small bug in cookie jar and added many new tests
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Sep 6, 2011
1 parent 2ffe606 commit 8ff9e58
Show file tree
Hide file tree
Showing 3 changed files with 161 additions and 19 deletions.
3 changes: 2 additions & 1 deletion Changes
@@ -1,7 +1,8 @@
This file documents the revision history for Perl extension Mojolicious.

1.98 2011-09-03 00:00:00
1.98 2011-09-06 00:00:00
- Improved tests.
- Fixed small bug in cookie jar.

1.97 2011-09-03 00:00:00
- Improved unicode handling to be more correct and less forgiving.
Expand Down
3 changes: 2 additions & 1 deletion lib/Mojo/CookieJar.pm
Expand Up @@ -31,6 +31,7 @@ sub add {
next if length(defined $value ? $value : '') > $self->max_cookie_size;

# Check if we already have a similar cookie
$domain =~ s/^\.//;
$self->{jar}->{$domain} ||= [];
my @new;
for my $old (@{$self->{jar}->{$domain}}) {
Expand Down Expand Up @@ -100,7 +101,7 @@ sub find {
}

# Remove another part
continue { $domain =~ s/^(?:\.?[^\.]+)// }
continue { $domain =~ s/^(?:[^\.]\.?+)// }

return @found;
}
Expand Down
174 changes: 157 additions & 17 deletions t/mojo/cookiejar.t
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
use Mojo::Base -strict;

use Test::More tests => 34;
use Test::More tests => 83;

# "Hello, my name is Mr. Burns. I believe you have a letter for me.
# Okay Mr. Burns, what’s your first name.
Expand All @@ -10,9 +10,8 @@ use_ok 'Mojo::CookieJar';
use_ok 'Mojo::Cookie::Response';
use_ok 'Mojo::URL';

my $jar = Mojo::CookieJar->new;

# Session cookie
my $jar = Mojo::CookieJar->new;
$jar->add(
Mojo::Cookie::Response->new(
domain => 'kraih.com',
Expand All @@ -30,11 +29,112 @@ $jar->add(
)
);
my @cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1]->name, 'just', 'right name';
is $cookies[1]->value, 'works', 'right value';
is $cookies[2], undef, 'no third cookie';
@cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1]->name, 'just', 'right name';
is $cookies[1]->value, 'works', 'right value';
is $cookies[2], undef, 'no third cookie';
@cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1]->name, 'just', 'right name';
is $cookies[1]->value, 'works', 'right value';
is $cookies[2], undef, 'no third cookie';
@cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1]->name, 'just', 'right name';
is $cookies[1]->value, 'works', 'right value';
is $cookies[2], undef, 'no third cookie';
@cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1]->name, 'just', 'right name';
is $cookies[1]->value, 'works', 'right value';
is $cookies[2], undef, 'no third cookie';

# Leading dot
$jar = Mojo::CookieJar->new;
$jar->add(
Mojo::Cookie::Response->new(
domain => '.kraih.com',
path => '/foo',
name => 'foo',
value => 'bar'
)
);
@cookies = $jar->find(Mojo::URL->new('http://labs.kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1], undef, 'no second cookie';
@cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1], undef, 'no second cookie';

# "localhost"
$jar = Mojo::CookieJar->new;
$jar->add(
Mojo::Cookie::Response->new(
domain => 'localhost',
path => '/foo',
name => 'foo',
value => 'bar'
)
);
$jar->add(
Mojo::Cookie::Response->new(
domain => 'foo.localhost',
path => '/foo',
name => 'bar',
value => 'baz'
)
);
@cookies = $jar->find(Mojo::URL->new('http://localhost/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1], undef, 'no second cookie';
@cookies = $jar->find(Mojo::URL->new('http://foo.localhost/foo'));
is $cookies[0]->name, 'bar', 'right name';
is $cookies[0]->value, 'baz', 'right value';
is $cookies[1]->name, 'foo', 'right name';
is $cookies[1]->value, 'bar', 'right value';
is $cookies[2], undef, 'no third cookie';
@cookies = $jar->find(Mojo::URL->new('http://foo.bar.localhost/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1], undef, 'no second cookie';
@cookies = $jar->find(Mojo::URL->new('http://bar.foo.localhost/foo'));
is $cookies[0]->name, 'bar', 'right name';
is $cookies[0]->value, 'baz', 'right value';
is $cookies[1]->name, 'foo', 'right name';
is $cookies[1]->value, 'bar', 'right value';
is $cookies[2], undef, 'no third cookie';

# Huge cookie
$jar = Mojo::CookieJar->new;
$jar->add(
Mojo::Cookie::Response->new(
domain => 'kraih.com',
path => '/foo',
name => 'foo',
value => 'bar'
)
);
$jar->add(
Mojo::Cookie::Response->new(
domain => 'www.kraih.com',
path => '/',
name => 'just',
value => 'works'
)
);
$jar->add(
Mojo::Cookie::Response->new(
domain => 'kraih.com',
Expand All @@ -49,6 +149,15 @@ is $cookies[0]->value, 'bar', 'right value';
is $cookies[1], undef, 'no second cookie';

# Expired cookie
$jar = Mojo::CookieJar->new;
$jar->add(
Mojo::Cookie::Response->new(
domain => 'kraih.com',
path => '/foo',
name => 'foo',
value => 'bar'
)
);
my $expired = Mojo::Cookie::Response->new(
domain => 'labs.kraih.com',
path => '/',
Expand All @@ -58,28 +167,54 @@ my $expired = Mojo::Cookie::Response->new(
$expired->expires(time - 1);
$jar->add($expired);
@cookies = $jar->find(Mojo::URL->new('http://labs.kraih.com/foo'));
is $cookies[0]->name, 'just', 'right name';
is $cookies[0]->value, 'works', 'right value';
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1], undef, 'no second cookie';

# Multiple cookies
$jar = Mojo::CookieJar->new;
$jar->add(
Mojo::Cookie::Response->new(
domain => 'kraih.com',
path => '/foo',
name => 'foo',
value => 'bar'
)
);
$jar->add(
Mojo::Cookie::Response->new(
domain => 'labs.kraih.com',
path => '/',
name => 'baz',
value => '23',
value => 23,
max_age => 60
)
);
@cookies = $jar->find(Mojo::URL->new('http://labs.kraih.com/foo'));
is $cookies[0]->name, 'baz', 'right name';
is $cookies[0]->value, '23', 'right value';
is $cookies[1]->name, 'just', 'right name';
is $cookies[1]->value, 'works', 'right value';
is $cookies[0]->name, 'baz', 'right name';
is $cookies[0]->value, 23, 'right value';
is $cookies[1]->name, 'foo', 'right name';
is $cookies[1]->value, 'bar', 'right value';
is $cookies[2], undef, 'no third cookie';

# Multiple cookies with leading dot
$jar = Mojo::CookieJar->new;
$jar->add(
Mojo::Cookie::Response->new(
domain => '.kraih.com',
path => '/',
name => 'foo',
value => 'bar'
)
);
$jar->add(
Mojo::Cookie::Response->new(
domain => '.labs.kraih.com',
path => '/',
name => 'baz',
value => 'yada'
)
);
$jar->add(
Mojo::Cookie::Response->new(
domain => '.kraih.com',
Expand All @@ -89,12 +224,12 @@ $jar->add(
)
);
@cookies = $jar->find(Mojo::URL->new('http://labs.kraih.com/fo'));
is $cookies[0]->name, 'baz', 'right name';
is $cookies[0]->value, '23', 'right value';
is $cookies[1]->name, 'just', 'right name';
is $cookies[1]->value, 'works', 'right value';
is $cookies[2]->name, 'this', 'right name';
is $cookies[2]->value, 'that', 'right value';
is $cookies[0]->name, 'baz', 'right name';
is $cookies[0]->value, 'yada', 'right value';
is $cookies[1]->name, 'foo', 'right name';
is $cookies[1]->value, 'bar', 'right value';
is $cookies[2]->name, 'this', 'right name';
is $cookies[2]->value, 'that', 'right value';
is $cookies[3], undef, 'no fourth cookie';

# Replace cookie
Expand All @@ -116,6 +251,7 @@ $jar->add(
)
);
@cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar2', 'right value';
is $cookies[1], undef, 'no second cookie';

Expand All @@ -133,7 +269,8 @@ $jar->add(
@cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is $cookies[0], undef, 'no cookie for port 80';
@cookies = $jar->find(Mojo::URL->new('http://kraih.com:88/foo'));
is $cookies[0]->value, 'bar', 'cookie for port 88';
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1], undef, 'no second cookie';

# Switch between secure and normal cookies
Expand All @@ -148,6 +285,7 @@ $jar->add(
)
);
@cookies = $jar->find(Mojo::URL->new('https://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'foo', 'right value';
@cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is @cookies, 0, 'no insecure cookie';
Expand All @@ -160,7 +298,9 @@ $jar->add(
)
);
@cookies = $jar->find(Mojo::URL->new('http://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
@cookies = $jar->find(Mojo::URL->new('https://kraih.com/foo'));
is $cookies[0]->name, 'foo', 'right name';
is $cookies[0]->value, 'bar', 'right value';
is $cookies[1], undef, 'no second cookie';

0 comments on commit 8ff9e58

Please sign in to comment.