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

use Test::More;
use Filesys::SmbClient;
use strict;
use diagnostics;

plan tests=>18;

my $loaded = 1;
ok($loaded,"Load module");

my $buffer = "A test of write call\n";
my $buffer2 = "buffer of 1234\n";

SKIP: {
  skip "No server defined for test at perl Makefile.PL", 17 if (!-e ".c");
if (-e ".c") {
  use POSIX;
  my $ok = 0;
  open(F,".c") || die "Can't read .c\n";
  my $l = <F>; chomp($l); 
  my @l = split(/\t/, $l);
  my %param = 
    (
     username  => $l[3],
     password  => $l[4],
     workgroup => $l[2],
     debug     =>  0,
     flags     => SMBCCTX_FLAG_NO_AUTO_ANONYMOUS_LOGON
    );
  my $smb = new Filesys::SmbClient(%param);
  my $server = "smb://$l[0]/$l[1]";

  # Create a directory
  ok($smb->mkdir("$server/toto",'0666'),"Create directory")
    or diag("With $!");

  # Create a existent directory
  ok(!$smb->mkdir("$server/toto",'0666'),"Create existent directory");

  # Write a file
  my $fd = $smb->open(">$server/toto/test",0666);
  if ($fd) {
    $ok = 1 if ($smb->write($fd,$buffer));
  }
  $smb->close($fd);
  ok($ok,"Create file");
  $ok=0;

  # Rename a file
  ok($smb->rename("$server/toto/test","$server/toto/tata"),"Rename file")
    or diag("With $!");

  # Stat a file
  my @tab = $smb->stat("$server/toto/tata");
  ok($#tab != 0,"Stat file ") or diag("With $!");

  # Stat a non-existent file
  @tab = $smb->stat("smb://jupidsdsdster/soft/lala");
  ok($#tab == 0,"Stat non-existent file") or diag("With $!");

  # Read a file
  my $buf;
  $fd = $smb->open("$server/toto/tata",'0666');
  while (my $l= $smb->read($fd,50)) {$buf.=$l; }
  if (!$buf) { ok(0, "Read file"); }
  else {
    ok(length($buf) == length($buffer),"Read file")
      or diag("read ",length($buf)," bytes)");
  }
  $smb->close($fd);

  # Directory
  # Read a directory
  $fd = $smb->opendir("$server/toto"); 
  my @a;
  if ($fd) {	
    foreach my $n ($smb->readdir($fd)) {push(@a,$n);}
    $ok = 1 if ($#a==2);
    $smb->close($fd);
  }
  ok($ok,"Read short directory"); $ok=0;

  # Read long info on a directory
  undef @a;
  $fd = $smb->opendir("$server/toto");
  if ($fd) {	
    while (my $f = $smb->readdir_struct($fd)) { push(@a,$f); }
    $ok = 1 if ($#a==2);
    $smb->close($fd);
  }
  ok($ok,"Read long directory");

  # Unlink a file
  ok($smb->unlink("$server/toto/tata"),"Unlink file")
    or diag("With $!");

  # Unlink a non-existent file
  ok(!$smb->unlink("$server/toto/tatarr"),"Unlink non-existent file");

  ok($smb->mkdir("$server/toto/tate",'0666'),"Create directory")
    or diag("With $!");

  ok($smb->mkdir("$server/toto/tate/titi",'0666'),"Create directory")
    or diag("With $!");

  ok($smb->rmdir_recurse("$server/toto/tate",'0666'),
     "Rmdir entire directory") or diag("With $!");

  # Erase this directory
  ok($smb->rmdir("$server/toto/"),"Rm directory") or diag("With $!");

  # Erase non-existent directory
  ok(!$smb->rmdir("$server/totoarr/"),"Rm non-existent directory");

  # Rename a non-existent file
  ok(!$smb->rename("$server/toto/testrr","$server/toto/tata"),
     "Rename non-existent file");

  print "There is a .c file in this directory with info about your params \n",
        "for you SMB server test. Think to remove it if you have finish \n",
	  "with test.\n\n";
}
}