xref: /haiku/src/tests/kits/net/service/FileTest.cpp (revision 60a6f1d5d7a8715cd3897dd0b626f2e4a64984a8)
1 /*
2  * Copyright 2020, Haiku, Inc.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 #include "FileTest.h"
7 
8 #include <stdlib.h>
9 
10 #include <File.h>
11 #include <FileRequest.h>
12 #include <Url.h>
13 #include <UrlProtocolRoster.h>
14 #include <UrlProtocolListener.h>
15 
16 #include <ThreadedTestCaller.h>
17 #include <TestUtils.h>
18 
19 #include "TestServer.h"
20 
21 
22 class StopTestListener : public BUrlProtocolListener {
23 public:
24 	StopTestListener() {}
25 
26 	void DataReceived(BUrlRequest *caller, const char*, off_t, ssize_t)
27 	{
28 		caller->Stop();
29 	}
30 };
31 
32 
33 void
34 FileTest::StopTest()
35 {
36 	StopTestListener listener;
37 	char tmpl[] = "/tmp/filestoptestXXXXXX";
38 	int fd = mkstemp(tmpl);
39 	CHK(fd != -1);
40 	close(fd);
41 
42 	BFile file(tmpl, O_WRONLY | O_CREAT);
43 	CHK(file.InitCheck() == B_OK);
44 	BString content;
45 	/* number chosen to be larger than BFileRequest buffer, adjust as needed */
46 	content.Append('f', 40960);
47 
48 	CHK(file.WriteExactly(content.String(), content.Length()) == B_OK);
49 
50 	BUrl url("file://");
51 	url.SetPath(tmpl);
52 	BUrlRequest *request = BUrlProtocolRoster::MakeRequest(url, &listener);
53 	CHK(request != NULL);
54 
55 	thread_id thr = request->Run();
56 	status_t dummy;
57 	wait_for_thread(thr, &dummy);
58 
59 	CHK(request->Status() == B_INTERRUPTED);
60 
61 	delete request;
62 
63 	request = BUrlProtocolRoster::MakeRequest("file:///", &listener);
64 	CHK(request != NULL);
65 
66 	thr = request->Run();
67 	wait_for_thread(thr, &dummy);
68 
69 	CHK(request->Status() == B_INTERRUPTED);
70 
71 	delete request;
72 }
73 
74 
75 /* static */ void
76 FileTest::AddTests(BTestSuite& parent)
77 {
78 	CppUnit::TestSuite *suite = new CppUnit::TestSuite("FileTest");
79 
80 	suite->addTest(new CppUnit::TestCaller<FileTest>("FileTest: Stop requests",
81 		&FileTest::StopTest));
82 
83 	parent.addTest("FileTest", suite);
84 }
85