The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use Test::More;

my $depend_modules = 0;
eval { require Event } && ++$depend_modules;
eval { require Glib }  && ++$depend_modules;

if ( not $depend_modules ) {
	plan skip_all => "Neither Event nor Glib installed";
}

plan tests => 10;

my $PORT = 27811;

# load client class
use_ok('Event::RPC::Client');

# start server in background, without logging
require "t/Event_RPC_Test_Server.pm";
Event_RPC_Test_Server->start_server (
  p => $PORT,
  S => 1,
);

# create client instance
my $client = Event::RPC::Client->new (
  host     => "localhost",
  port     => $PORT,
);

# connect to server
$client->connect;
ok(1, "connected");

# create instance of test class over RPC
my $data = "Some test data. " x 6;
my $object = Event_RPC_Test->new (
    data => $data
);

# check object
ok($object->isa("Event_RPC_Test"), "object is Event_RPC_Test");

# get another object from this object
my $object2 = $object->get_object2;
ok($object2->isa("Event_RPC_Test2"), "object is Event_RPC_Test2");

# check data of object2
ok($object2->get_data eq 'foo', "object data is 'foo'");

# create another object from this object
$object2 = $object->new_object2($$);
ok($object2->isa("Event_RPC_Test2"), "object is Event_RPC_Test2");

# check data of object2
ok($object2->get_data == $$, "object data is $$");

# check if copying the complete object hash works
my $ref = $object2->get_object_copy;
ok($ref->{data} == $$, "object copy data is $$");

# disconnect client
ok ($client->disconnect, "client disconnected");

# wait on server to quit
wait;
ok (1, "server stopped");