nginx: additional version check for uwsgi and scgi
[MogileFS-Server.git] / t / 40-httpfile.t
blob7fed6d732289de68be91080f71e2640f90a46db4
1 # -*-perl-*-
3 use strict;
4 use warnings;
5 use Test::More;
6 use FindBin qw($Bin);
8 use MogileFS::Server;
9 use MogileFS::Util qw(error_code);
10 use MogileFS::Test;
12 find_mogclient_or_skip();
14 my $sto = eval { temp_store(); };
15 if (!$sto) {
16     plan skip_all => "Can't create temporary test database: $@";
17     exit 0;
20 my $dbh = $sto->dbh;
21 my $rv;
23 my ($hostA_ip) = (qw/127.0.1.1/);
25 use File::Temp;
26 my %mogroot;
27 $mogroot{1} = File::Temp::tempdir( CLEANUP => 1 );
28 my $dev2host = { 1 => 1 };
29 foreach (sort { $a <=> $b } keys %$dev2host) {
30     my $root = $mogroot{$dev2host->{$_}};
31     mkdir("$root/dev$_") or die "Failed to create dev$_ dir: $!";
34 my $ms1 = create_mogstored($hostA_ip, $mogroot{1});
36 while (! -e "$mogroot{1}/dev1/usage") {
37     print "Waiting on usage...\n";
38     sleep 1;
41 my $tmptrack = create_temp_tracker($sto);
42 ok($tmptrack);
44 my $mogc = MogileFS::Client->new(
45                                  domain => "testdom",
46                                  hosts  => [ "127.0.0.1:7001" ],
47                                  );
48 my $be = $mogc->{backend}; # gross, reaching inside of MogileFS::Client
50 # test some basic commands to backend
51 ok($be->do_request("test", {}), "test ping worked");
53 ok($tmptrack->mogadm("domain", "add", "testdom"), "created test domain");
54 ok($tmptrack->mogadm("class", "add", "testdom", "1copy", "--mindevcount=1"), "created 1copy class in testdom");
56 ok($tmptrack->mogadm("host", "add", "hostA", "--ip=$hostA_ip", "--status=alive"), "created hostA");
58 ok($tmptrack->mogadm("device", "add", "hostA", 1), "created dev1 on hostA");
60 # wait for monitor
62     my $was = $be->{timeout};  # can't use local on phash :(
63     $be->{timeout} = 10;
64     ok($be->do_request("clear_cache", {}), "waited for monitor")
65         or die "Failed to wait for monitor";
66     ok($be->do_request("clear_cache", {}), "waited for monitor")
67         or die "Failed to wait for monitor";
68     $be->{timeout} = $was;
71 # create a file
72 my $fh = $mogc->new_file("file", "1copy")
73         or die "Failed to create file: " . $mogc->errstr;
74 my $data = "DATA";
75 print $fh $data;
76 close($fh) or die "Failed to close file";
77 my @paths = $mogc->get_paths("file");
79 use MogileFS::Device;
80 use MogileFS::Host;
81 use MogileFS::Config;
82 use MogileFS::Rebalance;
83 use MogileFS::Factory::Host;
84 use MogileFS::Factory::Device;
85 use Digest::MD5 qw/md5/;
87 my $dfac = MogileFS::Factory::Device->get_factory;
88 my $hfac = MogileFS::Factory::Host->get_factory;
90 map { $hfac->set($_) } $sto->get_all_hosts;
91 map { $dfac->set($_) } $sto->get_all_devices;
92 my @devs = $dfac->get_all;
94 ### Hacks to make tests work :/
95 $MogileFS::Config::skipconfig = 1;
96 MogileFS::Config->load_config;
98 my $file = MogileFS::HTTPFile->at($paths[0]);
99 my $md5_digest;
101 $md5_digest = $file->digest_mgmt("MD5", sub {});
102 ok($md5_digest eq md5("DATA"), "mgmt only");
103 my $cb_called = 0;
104 $md5_digest = $file->digest_http("MD5", sub { $cb_called++ });
105 ok(1 == $cb_called, "ping callback called");
106 ok($md5_digest eq md5("DATA"), "http only");
108 $md5_digest = $file->digest("MD5", sub {});
109 ok($md5_digest eq md5("DATA"), "mgmt or http");
110 ok(length($md5_digest) == 16, "MD5 is 16 bytes (128 bits)");
112 my $size = 100 * 1024 * 1024;
113 $fh = $mogc->new_file("largefile", "1copy")
114         or die "Failed to create largefile: " . $mogc->errstr;
115 $data = "LARGE" x 20;
116 my $expect = Digest::MD5->new;
117 foreach my $i (1..(1024 * 1024)) {
118         $expect->add($data);
119         print $fh $data or die "failed to write chunk $i for largefile";
121 close($fh) or die "Failed to close largefile";
122 $expect = $expect->digest;
123 @paths = $mogc->get_paths("largefile");
124 $file = MogileFS::HTTPFile->at($paths[0]);
125 ok($size == $file->size, "big file size match $size");
126 ok($file->digest_mgmt('MD5', sub {}) eq $expect, "digest_mgmt('MD5') on big file");
127 ok($file->digest_http('MD5', sub {}) eq $expect, "digest_http('MD5') on big file");
129 done_testing();