xref: /haiku/src/tests/kits/net/service/FileTest.cpp (revision 9e4c5cf124438891e20947b72d13412d78018800)
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 using namespace BPrivate::Network;
23 
24 
25 class StopTestListener : public BUrlProtocolListener {
26 public:
27 	StopTestListener() {}
28 
29 	void DataReceived(BUrlRequest *caller, const char*, off_t, ssize_t)
30 	{
31 		caller->Stop();
32 	}
33 };
34 
35 
36 void
37 FileTest::StopTest()
38 {
39 	StopTestListener listener;
40 	char tmpl[] = "/tmp/filestoptestXXXXXX";
41 	int fd = mkstemp(tmpl);
42 	CHK(fd != -1);
43 	close(fd);
44 
45 	BFile file(tmpl, O_WRONLY | O_CREAT);
46 	CHK(file.InitCheck() == B_OK);
47 	BString content;
48 	/* number chosen to be larger than BFileRequest buffer, adjust as needed */
49 	content.Append('f', 40960);
50 
51 	CHK(file.WriteExactly(content.String(), content.Length()) == B_OK);
52 
53 	BUrl url("file://");
54 	url.SetPath(tmpl);
55 	BUrlRequest *request = BUrlProtocolRoster::MakeRequest(url, &listener);
56 	CHK(request != NULL);
57 
58 	thread_id thr = request->Run();
59 	status_t dummy;
60 	wait_for_thread(thr, &dummy);
61 
62 	CHK(request->Status() == B_INTERRUPTED);
63 
64 	delete request;
65 
66 	request = BUrlProtocolRoster::MakeRequest("file:///", &listener);
67 	CHK(request != NULL);
68 
69 	thr = request->Run();
70 	wait_for_thread(thr, &dummy);
71 
72 	CHK(request->Status() == B_INTERRUPTED);
73 
74 	delete request;
75 }
76 
77 
78 /* static */ void
79 FileTest::AddTests(BTestSuite& parent)
80 {
81 	CppUnit::TestSuite *suite = new CppUnit::TestSuite("FileTest");
82 
83 	suite->addTest(new CppUnit::TestCaller<FileTest>("FileTest: Stop requests",
84 		&FileTest::StopTest));
85 
86 	parent.addTest("FileTest", suite);
87 }
88