NAME

Rex::Test::Spec - Write Rex::Test like RSpec!

VERSION

Version 0.03

SYNOPSIS

use Rex::Test::Spec;
describe "Nginx Test", sub {
    context run("nginx -t"), "nginx.conf testing", sub {
        like its('stdout'), qr/ok/;
    };
    context file("~/.ssh/id_rsa"), sub {
        is its('ensure'), 'file';
        is its('mode'), '0600';
        like its('content'), qr/name\@email\.com/;
    };
    context file("/data"), sub {
        is its('ensure'), 'directory';
        is its('owner'), 'www';
        is its('mounted_on'), '/dev/sdb1';
        isnt its('writable');
    };
    context service("nginx"), sub {
        is its('ensure'), 'running';
    };
    context pkg("nginx"), sub {
        is its('ensure'), 'present';
        is its('version'), '1.5.8';
    };
    context cron, sub {
        like its('www'), 'logrotate';
    };
    context gateway, sub {
        is it, '192.168.0.1';
    };
    context group('www'), sub {
        ok its('ensure');
    };
    context iptables, sub {
    };
    context port(80), sub {
        is its('bind'), '0.0.0.0';
        is its('proto'), 'tcp';
        is its('command'), 'nginx';
    };
    context process('nginx'), sub {
        like its('command'), qr(nginx -c /etc/nginx.conf);
        ok its('mem') > 1024;
    };
    context routes, sub {
        is_deeply its(1), {
            destination => $dest,
            gateway     => $gw,
            genmask     => $genmask,
            flags       => $flags,
            mss         => $mss,
            irtt        => $irtt,
            iface       => $iface,
        };
    };
    context sysctl, sub {
        is its('vm.swapiness'), 1;
    };
    context user('www'), sub {
        ok its('ensure');
        is its('home'), '/var/www/html';
        is its('shell'), '/sbin/nologin';
        is_deeply its('belong_to'), ['www', 'nogroup'];
    };
};
done_testing;

EXPORT FUNCTIONS

Spec definition functions

These are the functions you will use to define behaviors and run your specs: describe (and alias to context), its (alias to it).

Normally suggest describe "strings" and context resource type object, use its(key) return value, it return objects by default.

Test::More export functions

This now include is, isnt, ok, is_deeply, like, unlike, done_testing. You'll use these to assert correct behavior.

The resource type name will be automatic passed as testing message.

Rex resource type generation functions

Now support cron, gateway, iptables, port, routes, service, user, file, group, pkg, process, run, sysctl.

See "SYNOPSIS" for more details.

AUTHOR

Rao Chenlin(chenryn), <rao.chenlin at gmail.com>

SEE ALSO

1. Rspec

http://rspec.info/

2. Serverspec

http://serverspec.org/

3. TDD (Test Driven Development)

http://en.wikipedia.org/wiki/Test-driven_development

4. BDD (Behavior Driven Development)

http://en.wikipedia.org/wiki/Behavior_Driven_Development

5. Test::More
6. Rex

BUGS

Please report any bugs or feature requests to bug-rex-test-spec at rt.cpan.org, or through the web interface at http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Rex-Test-Spec. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

Also accept pull requests and issue at https://github.com/chenryn/Rex--Test--Spec.

LICENSE AND COPYRIGHT

Copyright 2014 Rao Chenlin(chenryn).

This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License.

See http://dev.perl.org/licenses/ for more information.