1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
#!/usr/bin/env perl
# Copyright (C) 2008-2010, Sebastian Riedel.
use strict;
use warnings;
use Mojo::IOLoop;
use Test::More;
# Make sure sockets are working
plan skip_all => 'working sockets required for this test!'
unless Mojo::IOLoop->new->generate_port;
plan tests => 10;
# Oh, dear. She’s stuck in an infinite loop and he’s an idiot.
# Well, that’s love for you.
use Mojolicious::Lite;
use Mojo::Client;
# Silence
app->log->level('fatal');
# Avoid exception template
app->renderer->root(app->home->rel_dir('public'));
# WebSocket /
my $flag;
websocket '/' => sub {
my $self = shift;
$self->finished(sub { $flag += 4 });
$self->receive_message(
sub {
my ($self, $message) = @_;
$self->send_message("${message}test2");
$flag = 20;
}
);
};
# WebSocket /early_start
websocket '/early_start' => sub {
my $self = shift;
$self->send_message('test1');
$self->receive_message(
sub {
my ($self, $message) = @_;
$self->send_message("${message}test2");
$self->finish;
}
);
};
# WebSocket /dead
websocket '/dead' => sub { die 'i see dead processes' };
# WebSocket /foo
websocket '/foo' => sub { shift->res->code('403')->message("i'm a teapot") };
# WebSocket /deadcallback
websocket '/deadcallback' => sub {
my $self = shift;
$self->receive_message(sub { die 'i see dead callbacks' });
};
my $client = Mojo::Client->new->app(app);
# WebSocket /
my $result;
$client->websocket(
'/' => sub {
my $self = shift;
$self->receive_message(
sub {
my ($self, $message) = @_;
$result = $message;
$self->finish;
}
);
$self->send_message('test1');
}
)->process;
is($result, 'test1test2');
is($flag, 24);
# WebSocket /early_start (server directly sends a message)
($flag, $result) = undef;
$client->websocket(
'/early_start' => sub {
my $self = shift;
$self->finished(sub { $flag += 5 });
$self->receive_message(
sub {
my ($self, $message) = @_;
$result = $message;
$self->send_message('test3');
$flag = 18;
}
);
}
)->process;
is($flag, 23);
is($result, 'test3test2');
# WebSocket /dead (dies)
my ($websocket, $code, $message);
$client->websocket(
'/dead' => sub {
my $self = shift;
$websocket = $self->tx->is_websocket;
$code = $self->res->code;
$message = $self->res->message;
}
)->process;
is($websocket, 0);
is($code, 500);
is($message, 'Internal Server Error');
# WebSocket /foo (forbidden)
($websocket, $code, $message) = undef;
$client->websocket(
'/foo' => sub {
my $self = shift;
$websocket = $self->tx->is_websocket;
$code = $self->res->code;
$message = $self->res->message;
}
)->process;
is($websocket, 0);
is($code, 403);
is($message, "i'm a teapot");
# WebSocket /deadcallback (dies in callback)
$client->websocket(
'/deadcallback' => sub {
my $self = shift;
$self->send_message('test1');
}
)->process;
|