1--TEST--
2Userstream unlink, rename, mkdir, rmdir, and url_stat.
3--FILE--
4<?php # vim:ft=php:
5class test {
6    function unlink($file) {
7        print "Unlinking file: $file\n";
8    }
9
10    function rename($from, $to) {
11        print "Renaming $from to $to\n";
12    }
13
14    function mkdir($directory, $mode, $options) {
15        printf("Making directory: %s as %o%s\n", $directory, $mode, $options & STREAM_MKDIR_RECURSIVE ? " recursively" : "");
16    }
17
18    function rmdir($directory, $options) {
19        print "Removing directory: $directory\n";
20    }
21
22    function url_stat($path, $options) {
23		/* By printing out a notice that we are actively stating the file
24		   then subsequently performing multiple stat operations on it
25		   we effectively test the stat cache mechanism */
26        print "Stating file: $path\n";
27        return array('dev'=>1, 'ino'=>2, 'mode'=>0644, 'nlink'=>3,
28                     'uid'=>100, 'gid'=>1000, 'rdev'=>-1, 'size'=>31337,
29                     'atime'=>1234567890, 'mtime'=>1231231231, 'ctime'=>1234564564,
30                     'blksize'=>-1, 'blocks'=>-1);
31    }
32}
33
34stream_wrapper_register('test', 'test');
35
36unlink('test://example.com/path/to/file');
37rename('test://example.com/path/to/from', 'test://example.com/path/to/to');
38/* We *want* this to fail and thus not output the watch statement */
39@rename('test://example.com/path/to/from', 'http://example.com/path/to/to');
40mkdir('test://example.com/path/to/directory', 0755);
41rmdir('test://example.com/path/to/directory');
42print_r(stat('test://example.com/path/to/file'));
43echo "Filesize = " . filesize('test://example.com/path/to/file') . "\n";
44echo "filemtime = " . filemtime('test://example.com/path/to/file') . "\n";
45?>
46--EXPECT--
47Unlinking file: test://example.com/path/to/file
48Renaming test://example.com/path/to/from to test://example.com/path/to/to
49Making directory: test://example.com/path/to/directory as 755
50Removing directory: test://example.com/path/to/directory
51Stating file: test://example.com/path/to/file
52Array
53(
54    [0] => 1
55    [1] => 2
56    [2] => 420
57    [3] => 3
58    [4] => 100
59    [5] => 1000
60    [6] => -1
61    [7] => 31337
62    [8] => 1234567890
63    [9] => 1231231231
64    [10] => 1234564564
65    [11] => -1
66    [12] => -1
67    [dev] => 1
68    [ino] => 2
69    [mode] => 420
70    [nlink] => 3
71    [uid] => 100
72    [gid] => 1000
73    [rdev] => -1
74    [size] => 31337
75    [atime] => 1234567890
76    [mtime] => 1231231231
77    [ctime] => 1234564564
78    [blksize] => -1
79    [blocks] => -1
80)
81Filesize = 31337
82filemtime = 1231231231
83