ObjFW  Check-in [aa56dd6d2a]

Overview
Comment:Migrate OFKernelEventObserverTests to ObjFWTest
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | objfwtest
Files: files | file ages | folders
SHA3-256: aa56dd6d2a2ad4ca957d7641e2b0415417579ae0ae6f497af2ddc2bf4939ec23
User & Date: js on 2024-02-18 11:08:29
Other Links: branch diff | manifest | tags
Context
2024-02-18
11:33
Migrate OFListTests to ObjFWTest check-in: a1fd65f4a6 user: js tags: objfwtest
11:08
Migrate OFKernelEventObserverTests to ObjFWTest check-in: aa56dd6d2a user: js tags: objfwtest
10:11
Migrate OFHTTPClientTests to ObjFWTest check-in: 851f6138bf user: js tags: objfwtest
Changes

Modified new_tests/Makefile from [2da97fd19f] to [f5bf523af6].

52
53
54
55
56
57
58

59

60
61
62

63
64
65
66
67
68
69
52
53
54
55
56
57
58
59

60
61
62

63
64
65
66
67
68
69
70







+
-
+


-
+







       ${USE_SRCS_SOCKETS}		\
       ${USE_SRCS_SUBPROCESSES}		\
       ${USE_SRCS_THREADS}		\
       ${USE_SRCS_WINDOWS}		\
       testfile_bin.m			\
       testfile_ini.m
SRCS_PLUGINS = OFPluginTests.m
SRCS_SOCKETS = OFDNSResolverTests.m		\
SRCS_SOCKETS = ${OF_HTTP_CLIENT_TESTS_M}	\
	       ${OF_HTTP_CLIENT_TESTS_M}	\
	       OFHTTPCookieManagerTests.m	\
	       OFHTTPCookieTests.m		\
	       OFDNSResolverTests.m		\
	       OFKernelEventObserverTests.m	\
	       OFSocketTests.m			\
	       OFTCPSocketTests.m		\
	       OFUDPSocketTests.m		\
	       ${USE_SRCS_IPX}			\
	       ${USE_SRCS_UNIX_SOCKETS}		\
	       ${USE_SRCS_APPLETALK}
SRCS_APPLETALK = OFDDPSocketTests.m

Renamed and modified tests/OFKernelEventObserverTests.m [fd27260531] to new_tests/OFKernelEventObserverTests.m [2177e01800].

11
12
13
14
15
16
17



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

33
34
35
36
37

38
39
40
41
42

43
44
45
46
47
48
49
50

51
52
53
54




55
56

57
58

59
60
61
62



63
64
65
66
67




68
69
70
71
72
73
74
75
76
77
78
79


80
81
82
83
84
85

86
87
88

89
90
91



92
93

94
95
96
97
98
99
100
101
102
103

104
105
106
107
108
109
110
111
112
113
114

115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132

133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154




155
156
157
158
159
160
161
162
163

164
165
166
167
168
169
170
171
172
173

174
175
176
177
178
179
180
181
182
183
184


185
186
187

188
189
190
191
192
193
194
195
196
197

198
199
200
201

202
203
204

205
206
207

208
209
210

211
212
213

214
215
216


217
218

219
220

221
222

223

224
225
226
227



228

229
230
231
232



233
234
235

236
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33


34





35
36



37
38
39

40


41
42

43




44
45
46
47


48
49

50
51



52
53
54
55




56
57
58
59






60
61
62
63


64
65
66
67
68
69
70

71
72

73
74
75


76
77
78
79
80
81
82
83
84
85
86
87
88
89
90

91











92









93
94
95
96
97
98
99
100

101









102
103
104





105
106



107
108
109
110









111

112





113
114

115











116
117
118
119

120
121
122

123






124




125



126



127



128

129

130



131
132


133


134


135
136
137
138
139
140

141
142
143
144
145
146
147
148

149
150
151
152

153
154
155







+
+
+













-
-
+
-
-
-
-
-
+

-
-
-

+

-

-
-


-
+
-
-
-
-
+
+
+
+
-
-
+

-
+

-
-
-
+
+
+

-
-
-
-
+
+
+
+
-
-
-
-
-
-




-
-
+
+





-
+

-

+

-
-
+
+
+


+









-
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-








-
+
-
-
-
-
-
-
-
-
-



-
-
-
-
-


-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
+
-

-
-
-
-
-


-
+
-
-
-
-
-
-
-
-
-
-
-
+
+


-
+


-

-
-
-
-
-
-
+
-
-
-
-
+
-
-
-
+
-
-
-
+
-
-
-
+
-

-
+
-
-
-
+
+
-
-
+
-
-
+
-
-
+

+



-
+
+
+

+



-
+
+
+

-

+

 * Public License, either version 2 or 3, which can be found in the file
 * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
 * file.
 */

#include "config.h"

#import "ObjFW.h"
#import "ObjFWTest.h"

#ifdef HAVE_KQUEUE
# import "OFKqueueKernelEventObserver.h"
#endif
#ifdef HAVE_EPOLL
# import "OFEpollKernelEventObserver.h"
#endif
#ifdef HAVE_POLL
# import "OFPollKernelEventObserver.h"
#endif
#ifdef HAVE_SELECT
# import "OFSelectKernelEventObserver.h"
#endif

#import "TestsAppDelegate.h"

@interface OFKernelEventObserverTests: OTTestCase
static const size_t numExpectedEvents = 3;

static OFString *module;

@interface ObserverTest: OFObject <OFKernelEventObserverDelegate>
    <OFKernelEventObserverDelegate>
{
@public
	TestsAppDelegate *_testsAppDelegate;
	OFKernelEventObserver *_observer;
	OFTCPSocket *_server, *_client, *_accepted;
	OFKernelEventObserver *_observer;
	size_t _events;
	int _fails;
}

- (void)run;
@end

@implementation ObserverTest
static const size_t numExpectedEvents = 3;
- (instancetype)initWithTestsAppDelegate: (TestsAppDelegate *)testsAppDelegate
{
	self = [super init];


@implementation OFKernelEventObserverTests
- (void)setUp
{
	@try {
		OFSocketAddress address;
	OFSocketAddress address;

		_testsAppDelegate = testsAppDelegate;
	[super setUp];

		_server = [[OFTCPSocket alloc] init];
		address = [_server bindToHost: @"127.0.0.1" port: 0];
		[_server listen];
	_server = [[OFTCPSocket alloc] init];
	address = [_server bindToHost: @"127.0.0.1" port: 0];
	[_server listen];

		_client = [[OFTCPSocket alloc] init];
		[_client connectToHost: @"127.0.0.1"
				  port: OFSocketAddressIPPort(&address)];
		[_client writeBuffer: "0" length: 1];
	_client = [[OFTCPSocket alloc] init];
	[_client connectToHost: @"127.0.0.1"
			  port: OFSocketAddressIPPort(&address)];
	[_client writeBuffer: "0" length: 1];
	} @catch (id e) {
		[self release];
		@throw e;
	}

	return self;
}

- (void)dealloc
{
	[_server release];
	[_client release];
	[_client release];
	[_server release];
	[_accepted release];

	[super dealloc];
}

- (void)run
- (void)testKernelEventObserverWithClass: (Class)class
{
	OFDate *deadline;
	bool deadlineExceeded = false;
	OFDate *deadline;

	[_testsAppDelegate outputTesting: @"-[observe] with listening socket"
				inModule: module];
	_observer = [[class alloc] init];
	_observer.delegate = self;
	[_observer addObjectForReading: _server];

	deadline = [OFDate dateWithTimeIntervalSinceNow: 1];

	while (_events < numExpectedEvents) {
		if (deadline.timeIntervalSinceNow < 0) {
			deadlineExceeded = true;
			break;
		}

		[_observer observeForTimeInterval: 0.01];
	}

	if (!deadlineExceeded)
	OTAssertFalse(deadlineExceeded);
		[_testsAppDelegate
		    outputSuccess: @"-[observe] not exceeding deadline"
			 inModule: module];
	else {
		[_testsAppDelegate
		    outputFailure: @"-[observe] not exceeding deadline"
			 inModule: module];
		_fails++;
	}

	if (_events == numExpectedEvents)
	OTAssertEqual(_events, numExpectedEvents);
		[_testsAppDelegate
		    outputSuccess: @"-[observe] handling all events"
			 inModule: module];
	else {
		[_testsAppDelegate
		    outputFailure: @"-[observe] handling all events"
			 inModule: module];
		_fails++;
	}
}

- (void)objectIsReadyForReading: (id)object
{
	char buffer;

	switch (_events++) {
	case 0:
		if (object == _server)
		OTAssertEqual(object, _server);
			[_testsAppDelegate
			    outputSuccess: @"-[observe] with listening socket"
				 inModule: module];
		else {
			[_testsAppDelegate
			    outputFailure: @"-[observe] with listening socket"
				 inModule: module];
			_fails++;
		}

		_accepted = [[object accept] retain];
		[_observer addObjectForReading: _accepted];

		[_testsAppDelegate
		    outputTesting: @"-[observe] with data ready to read"
			 inModule: module];

		break;
	case 1:
		if (object == _accepted &&
		    [object readIntoBuffer: &buffer length: 1] == 1 &&
		    buffer == '0')
		OTAssert(object, _accepted);

		OTAssertEqual([object readIntoBuffer: &buffer length: 1], 1);
		OTAssertEqual(buffer, '0');
			[_testsAppDelegate
			    outputSuccess: @"-[observe] with data ready to read"
				 inModule: module];
		else {
			[_testsAppDelegate
			    outputFailure: @"-[observe] with data ready to read"
				 inModule: module];
			_fails++;
		}


		[_client close];

		[_testsAppDelegate
		    outputTesting: @"-[observe] with closed connection"
			 inModule: module];

		break;
	case 2:
		if (object == _accepted &&
		OTAssertEqual(object,  _accepted);
		    [object readIntoBuffer: &buffer length: 1] == 0)
			[_testsAppDelegate
			    outputSuccess: @"-[observe] with closed connection"
				 inModule: module];
		else {
			[_testsAppDelegate
			    outputFailure: @"-[observe] with closed connection"
				 inModule: module];
			_fails++;
		}


		OTAssertEqual([object readIntoBuffer: &buffer length: 1], 0);
		break;
	default:
		OFEnsure(0);
		OTAssert(false);
	}
}
@end

@implementation TestsAppDelegate (OFKernelEventObserverTests)
- (void)kernelEventObserverTestsWithClass: (Class)class
{
	void *pool = objc_autoreleasePoolPush();
	ObserverTest *test;

#ifdef HAVE_SELECT
	module = [class className];
	test = [[[ObserverTest alloc]
	    initWithTestsAppDelegate: self] autorelease];

- (void)testSelectKernelEventObserver
	TEST(@"+[observer]", (test->_observer = [class observer]))
	test->_observer.delegate = test;

{
	TEST(@"-[addObjectForReading:]",
	    R([test->_observer addObjectForReading: test->_server]))

	[self testKernelEventObserverWithClass:
	[test run];
	_fails += test->_fails;

	    [OFSelectKernelEventObserver class]];
	objc_autoreleasePoolPop(pool);
}

#endif
- (void)kernelEventObserverTests
{
#ifdef HAVE_SELECT

#ifdef HAVE_POLL
	[self kernelEventObserverTestsWithClass:
	    [OFSelectKernelEventObserver class]];
- (void)testPollKernelEventObserver
#endif

{
#ifdef HAVE_POLL
	[self kernelEventObserverTestsWithClass:
	[self testKernelEventObserverWithClass:
	    [OFPollKernelEventObserver class]];
}
#endif

#ifdef HAVE_EPOLL
	[self kernelEventObserverTestsWithClass:
- (void)testEpollKernelEventObserver
{
	[self testKernelEventObserverWithClass:
	    [OFEpollKernelEventObserver class]];
}
#endif

#ifdef HAVE_KQUEUE
	[self kernelEventObserverTestsWithClass:
- (void)testKqueueKernelEventObserver
{
	[self testKernelEventObserverWithClass:
	    [OFKqueueKernelEventObserver class]];
#endif
}
#endif
@end

Modified tests/Makefile from [9ffa7ba9ba] to [dd9695c4fc].

17
18
19
20
21
22
23
24

25
26
27
28
29
30
31
32
33
34
17
18
19
20
21
22
23

24



25
26
27
28
29
30
31







-
+
-
-
-







       OFDictionaryTests.m		\
       OFListTests.m			\
       OFMemoryStreamTests.m		\
       OFStreamTests.m			\
       OFValueTests.m			\
       OFXMLNodeTests.m			\
       OFXMLParserTests.m		\
       TestsAppDelegate.m		\
       TestsAppDelegate.m
       ${USE_SRCS_FILES}		\
       ${USE_SRCS_SOCKETS}
SRCS_SOCKETS = OFKernelEventObserverTests.m

IOS_USER ?= mobile
IOS_TMP ?= /tmp/objfw-test

include ../buildsys.mk

.PHONY: run run-on-ios run-on-android

Modified tests/TestsAppDelegate.h from [32ce471abe] to [71616f115a].

63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
63
64
65
66
67
68
69




70
71
72
73
74
75
76







-
-
-
-







- (void)dataTests;
@end

@interface TestsAppDelegate (OFDictionaryTests)
- (void)dictionaryTests;
@end

@interface TestsAppDelegate (OFKernelEventObserverTests)
- (void)kernelEventObserverTests;
@end

@interface TestsAppDelegate (OFListTests)
- (void)listTests;
@end

@interface TestsAppDelegate  (OFMemoryStreamTests)
- (void)memoryStreamTests;
@end

Modified tests/TestsAppDelegate.m from [bc05260f0b] to [5330eaa06d].

372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
372
373
374
375
376
377
378



379
380
381
382
383
384
385







-
-
-








	[self dataTests];
	[self dictionaryTests];
	[self listTests];
	[self valueTests];
	[self streamTests];
	[self memoryStreamTests];
#ifdef OF_HAVE_SOCKETS
	[self kernelEventObserverTests];
#endif
	[self XMLParserTests];
	[self XMLNodeTests];

	[OFStdOut reset];

#if defined(OF_IOS)
	[OFStdOut writeFormat: @"%d tests failed!", _fails];