use strict; use warnings; use Test::More tests => 29; use File::Temp; use_ok('LATMOS::Accounts::Bases'); use_ok('LATMOS::Accounts::Bases::Objects'); use_ok('LATMOS::Accounts::Bases::Unix'); use_ok('LATMOS::Accounts::Bases::Unix::User'); use_ok('LATMOS::Accounts::Bases::Unix::Group'); my $dir = File::Temp::tempdir; foreach (qw(passwd shadow group gshadow)) { system('cp', "testdata/$_", "$dir/$_"); } ok(my $unixb = LATMOS::Accounts::Bases->new( 'unix', passwd => "$dir/passwd", shadow => "$dir/shadow", group => "$dir/group", gshadow => "$dir/gshadow", ), "Can get unix base"); isa_ok($unixb, 'LATMOS::Accounts::Bases'); isa_ok($unixb, 'LATMOS::Accounts::Bases::Unix'); ok($unixb->load, "Can load unix base"); is( $unixb->attribute('user', 'homeDirectory')->iname, "home", "can call get_fields_name"); ok(my $user = $unixb->get_object('user', 'root'), "Can get root user"); ok(my $group = $unixb->get_object('group', 'root'), "Can get root group"); is($user->get_c_field('homeDirectory'), '/root', 'Can get homeDirectory directory'); is($user->get_field('home'), '/root', 'Can get home directory'); is($user->get_field('shell'), '/bin/bash', 'Can get login shell'); ok($user->set_fields(shell => '/bin/tcsh'), "Can set login shell"); is($user->get_field('shell'), '/bin/tcsh', 'Can get modified login shell'); ok($unixb->create_object('user', 'admin', uid => 2, gid => 2, home => '/home/admin', shell => '/bin/sh', ), "Can create a user"); ok($unixb->commit, "Can save unix base"); ok(eq_set($group->get_c_field('memberUID'), [ 'user' ]), 'can get group\'s member'); ok($group->set_c_fields('memberUID', [ 'admin' ]), 'can set group\'s member'); ok(eq_set($group->get_c_field('memberUID'), [ 'admin' ]), 'can get group\'s member after change'); ok(my $unixbmod = LATMOS::Accounts::Bases->new( 'unix', passwd => "$dir/passwd", shadow => "$dir/shadow", group => "$dir/group", gshadow => "$dir/gshadow", ), "Can get unix base"); ok($unixbmod->load, "Can load saved db"); ok($user = $unixbmod->get_object('user', 'root'), "Can get object from modified db"); is($user->get_field('shell'), '/bin/tcsh', 'Can get modified login shell'); ok($unixbmod->rename_object('user', 'root', 'rootb'), "can rename object"); ok($unixbmod->get_object('user', 'rootb'), "can get renamed object"); ok(!$unixbmod->get_object('user', 'root'), "can get old object"); system('rm', '-fr', $dir);