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

use Proc::Launcher::Manager;

use File::Temp qw/ :POSIX /;
use Test::More tests => 16;
use File::Temp qw(tempdir);

my $tempdir = tempdir('/tmp/proc_launcher_XXXXXX', CLEANUP => 1);

my $manager = Proc::Launcher::Manager->new( app_name  => 'testapp',
                                            pid_dir   => $tempdir,
                                        );

my @test_daemons = qw( test_1 test_2 test_3 );

for my $daemon_name ( @test_daemons ) {
    ok( $manager->register( daemon_name => $daemon_name, start_method => sub { sleep 600 } ),
        "registering test daemon: $daemon_name"
    );
}

is_deeply( [ $manager->daemons_names() ],
           [ @test_daemons             ],
           "checking all_daemons()"
       );


# startup and shutdown
{
    ok( $manager->start(),
        "calling start() on manager to start registered daemons"
    );

    sleep 2;

    is_deeply( [ $manager->is_running ],
               [ @test_daemons             ],
               "checking all three daemons are now running"
           );

    ok( $manager->stop(),
        "Shutting down all daemons"
    );

    sleep 2;

    is_deeply( [ $manager->is_running ],
               [ ],
               "checking all three daemons were successfully shut down"
           );
}


# enable/disable
{
    ok( $manager->disable(),
        "calling disable() on manager to disable registered daemons"
    );

    ok( $manager->start(),
        "calling start() on manager to start registered daemons"
    );

    sleep 2;

    is_deeply( [ $manager->is_running ],
               [ ],
               "checking all three daemons were successfully shut down"
           );

    ok( $manager->enable(),
        "calling enable() on manager to enable registered daemons"
    );

}

# force_stop
{
    ok( $manager->start(),
        "calling start() on manager to start registered daemons"
    );

    sleep 2;

    is_deeply( [ $manager->is_running ],
               [ @test_daemons             ],
               "checking all three daemons are now running"
           );

    ok( $manager->force_stop(),
        "Shutting down all daemons"
    );

    sleep 2;

    is_deeply( [ $manager->is_running ],
               [ ],
               "checking all three daemons were successfully shut down"
           );
}