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
|
#import "TestsAppDelegate.h"
static OFString *module = @"OFKernelEventObserverSocket";
static OFKernelEventObserver *observer;
static int events = 0;
static id expectedObject;
static bool readData = false;
@interface ObserverDelegate: OFObject
- (void)objectIsReadyForReading: (id)object;
@end
@implementation ObserverDelegate
- (void)objectIsReadyForReading: (id)object
{
events++;
OF_ENSURE(object == expectedObject);
if ([object isListening]) {
OFTCPSocket *client = [object accept];
[observer addObjectForReading: client];
[client writeBuffer: "0"
length: 1];
return;
} else if (readData) {
char buf;
[object readIntoBuffer: &buf
length: 1];
OF_ENSURE(buf == '0');
}
}
@end
@implementation TestsAppDelegate (OFKernelEventObserverTests)
- (void)kernelEventObserverTests
{
|
|
>
|
<
|
|
<
<
>
|
|
|
>
>
|
>
|
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
|
#import "TestsAppDelegate.h"
static OFString *module = @"OFKernelEventObserverSocket";
static OFKernelEventObserver *observer;
static int events = 0;
static id expectedObject;
static bool readData = false, expectEOS = false;
static OFTCPSocket *accepted = nil;
@interface ObserverDelegate: OFObject
- (void)objectIsReadyForReading: (id)object;
@end
@implementation ObserverDelegate
- (void)objectIsReadyForReading: (id)object
{
events++;
OF_ENSURE(object == expectedObject);
if ([object isListening]) {
accepted = [[object accept] retain];
[accepted writeBuffer: "0"
length: 1];
} else if (readData) {
char buf;
if (expectEOS)
OF_ENSURE([object readIntoBuffer: &buf
length: 1] == 0);
else {
OF_ENSURE([object readIntoBuffer: &buf
length: 1] == 1);
OF_ENSURE(buf == '0');
}
}
}
@end
@implementation TestsAppDelegate (OFKernelEventObserverTests)
- (void)kernelEventObserverTests
{
|
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
|
TEST(@"-[addObjectForReading:]",
R([observer addObjectForReading: sock1]))
[sock2 connectToHost: @"127.0.0.1"
port: port];
TEST(@"-[observe] waiting for connection",
(expectedObject = sock1) &&
[observer observeForTimeInterval: 0.01] == 1)
TEST(@"-[observe] waiting for data",
(expectedObject = sock2) &&
R([observer addObjectForReading: sock2]) &&
[observer observeForTimeInterval: 0.01] == 1)
TEST(@"-[observe] keeping event until read",
R(readData = true) && [observer observeForTimeInterval: 0.01] == 1)
TEST(@"-[observe] time out due to no events",
R(readData = false) && [observer observeForTimeInterval: 0.01] == 0)
TEST(@"-[observe] correct number of events", events == 3)
[pool drain];
}
@end
|
|
>
|
|
>
>
>
>
>
|
|
|
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
|
TEST(@"-[addObjectForReading:]",
R([observer addObjectForReading: sock1]))
[sock2 connectToHost: @"127.0.0.1"
port: port];
TEST(@"-[observe] waiting for connection",
(expectedObject = sock1) &&
[observer observeForTimeInterval: 0.01])
[accepted autorelease];
TEST(@"-[observe] waiting for data",
(expectedObject = sock2) &&
R([observer addObjectForReading: sock2]) &&
[observer observeForTimeInterval: 0.01])
TEST(@"-[observe] keeping event until read",
R(readData = true) && [observer observeForTimeInterval: 0.01])
TEST(@"-[observe] time out due to no events",
R(readData = false) && ![observer observeForTimeInterval: 0.01])
[accepted close];
TEST(@"-[observe] closed connection",
R(readData = true) && R(expectEOS = true) &&
[observer observeForTimeInterval: 0.01])
TEST(@"-[observe] correct number of events", events == 4)
[pool drain];
}
@end
|