|
1 const URL = "ftp://localhost/bug464884/"; |
|
2 |
|
3 const tests = [ |
|
4 // standard ls unix format |
|
5 ["-rw-rw-r-- 1 500 500 0 Jan 01 2000 file1\r\n" + |
|
6 "-rw-rw-r-- 1 500 500 0 Jan 01 2000 file2\r\n", |
|
7 |
|
8 "300: " + URL + "\n" + |
|
9 "200: filename content-length last-modified file-type\n" + |
|
10 "201: \"file1\" 0 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n" + |
|
11 "201: \"%20file2\" 0 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n"], |
|
12 // old Hellsoft unix format |
|
13 ["-[RWCEMFA] supervisor 214059 Jan 01 2000 file1\r\n" + |
|
14 "-[RWCEMFA] supervisor 214059 Jan 01 2000 file2\r\n", |
|
15 |
|
16 "300: " + URL + "\n" + |
|
17 "200: filename content-length last-modified file-type\n" + |
|
18 "201: \"file1\" 214059 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n" + |
|
19 "201: \"file2\" 214059 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n"], |
|
20 // new Hellsoft unix format |
|
21 ["- [RWCEAFMS] jrd 192 Jan 01 2000 file1\r\n"+ |
|
22 "- [RWCEAFMS] jrd 192 Jan 01 2000 file2\r\n", |
|
23 |
|
24 "300: " + URL + "\n" + |
|
25 "200: filename content-length last-modified file-type\n" + |
|
26 "201: \"file1\" 192 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n" + |
|
27 "201: \"%20file2\" 192 Sun%2C%2001%20Jan%202000%2000%3A00%3A00 FILE \n"], |
|
28 // DOS format with correct offsets |
|
29 ["01-01-00 01:00AM <DIR> dir1\r\n" + |
|
30 "01-01-00 01:00AM <JUNCTION> junction1 -> foo1\r\n" + |
|
31 "01-01-00 01:00AM 95077 file1\r\n" + |
|
32 "01-01-00 01:00AM <DIR> dir2\r\n" + |
|
33 "01-01-00 01:00AM <JUNCTION> junction2 -> foo2\r\n" + |
|
34 "01-01-00 01:00AM 95077 file2\r\n", |
|
35 |
|
36 "300: " + URL + "\n" + |
|
37 "200: filename content-length last-modified file-type\n" + |
|
38 "201: \"dir1\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" + |
|
39 "201: \"junction1\" Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" + |
|
40 "201: \"file1\" 95077 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 FILE \n" + |
|
41 "201: \"%20dir2\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" + |
|
42 "201: \"%20junction2\" Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" + |
|
43 "201: \"%20file2\" 95077 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 FILE \n"], |
|
44 // DOS format with wrong offsets |
|
45 ["01-01-00 01:00AM <DIR> dir1\r\n" + |
|
46 "01-01-00 01:00AM <DIR> dir2\r\n" + |
|
47 "01-01-00 01:00AM <DIR> dir3\r\n" + |
|
48 "01-01-00 01:00AM <JUNCTION> junction1 -> foo1\r\n" + |
|
49 "01-01-00 01:00AM <JUNCTION> junction2 -> foo2\r\n" + |
|
50 "01-01-00 01:00AM <JUNCTION> junction3 -> foo3\r\n" + |
|
51 "01-01-00 01:00AM 95077 file1\r\n" + |
|
52 "01-01-00 01:00AM 95077 file2\r\n", |
|
53 |
|
54 "300: " + URL + "\n" + |
|
55 "200: filename content-length last-modified file-type\n" + |
|
56 "201: \"dir1\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" + |
|
57 "201: \"dir2\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" + |
|
58 "201: \"dir3\" 0 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 DIRECTORY \n" + |
|
59 "201: \"junction1\" Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" + |
|
60 "201: \"junction2\" Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" + |
|
61 "201: \"junction3\" Sun%2C%2001%20Jan%202000%2001%3A00%3A00 SYMBOLIC-LINK \n" + |
|
62 "201: \"file1\" 95077 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 FILE \n" + |
|
63 "201: \"file2\" 95077 Sun%2C%2001%20Jan%202000%2001%3A00%3A00 FILE \n"] |
|
64 ] |
|
65 |
|
66 function checkData(request, data, ctx) { |
|
67 do_check_eq(tests[0][1], data); |
|
68 tests.shift(); |
|
69 next_test(); |
|
70 } |
|
71 |
|
72 function storeData(status, entry) { |
|
73 do_check_eq(status, Components.results.NS_OK); |
|
74 entry.setMetaDataElement("servertype", "0"); |
|
75 var os = entry.openOutputStream(0); |
|
76 |
|
77 var written = os.write(tests[0][0], tests[0][0].length); |
|
78 if (written != tests[0][0].length) { |
|
79 do_throw("os.write has not written all data!\n" + |
|
80 " Expected: " + written + "\n" + |
|
81 " Actual: " + tests[0][0].length + "\n"); |
|
82 } |
|
83 os.close(); |
|
84 entry.close(); |
|
85 |
|
86 var ios = Components.classes["@mozilla.org/network/io-service;1"]. |
|
87 getService(Components.interfaces.nsIIOService); |
|
88 var channel = ios.newChannel(URL, "", null); |
|
89 channel.asyncOpen(new ChannelListener(checkData, null, CL_ALLOW_UNKNOWN_CL), null); |
|
90 } |
|
91 |
|
92 function next_test() { |
|
93 if (tests.length == 0) |
|
94 do_test_finished(); |
|
95 else { |
|
96 asyncOpenCacheEntry(URL, |
|
97 "disk", Ci.nsICacheStorage.OPEN_NORMALLY, null, |
|
98 storeData); |
|
99 } |
|
100 } |
|
101 |
|
102 function run_test() { |
|
103 do_execute_soon(next_test); |
|
104 do_test_pending(); |
|
105 } |