Author: rfm
Date: Sat Mar 5 15:04:55 2016
New Revision: 39457
URL: http://svn.gna.org/viewcvs/gnustep?rev=39457&view=rev
Log:
improved diagnostic messages
Modified:
libs/base/trunk/Tests/base/NSStream/socket_cs.m
Modified: libs/base/trunk/Tests/base/NSStream/socket_cs.m
URL:
http://svn.gna.org/viewcvs/gnustep/libs/base/trunk/Tests/base/NSStream/socket_cs.m?rev=39457&r1=39456&r2=39457&view=diff
==============================================================================
--- libs/base/trunk/Tests/base/NSStream/socket_cs.m (original)
+++ libs/base/trunk/Tests/base/NSStream/socket_cs.m Sat Mar 5 15:04:55 2016
@@ -13,6 +13,23 @@
static NSInputStream *clientInput = nil;
static NSData *goldData;
static NSMutableData *testData;
+static NSString *prefix = @"";
+
+static NSString *
+eventString(NSStream *stream, NSStreamEvent event)
+{
+ switch (event)
+ {
+ case NSStreamEventOpenCompleted: return @"open completed";
+ case NSStreamEventHasSpaceAvailable: return @"space available";
+ case NSStreamEventHasBytesAvailable: return @"bytes available";
+ case NSStreamEventEndEncountered: return @"end encountered";
+ case NSStreamEventErrorOccurred:
+ return [NSString stringWithFormat: @"error %d (%@)",
+ [[stream streamError] code], [stream streamError]];
+ default: return [NSString stringWithFormat: @"unknown event %d", event];
+ }
+}
@interface ClientListener : NSObject
{
@@ -25,55 +42,61 @@
- (void)stream: (NSStream *)theStream handleEvent: (NSStreamEvent)streamEvent
{
-NSLog(@"Client %p %d", theStream, streamEvent);
+NSLog(@"%@ Client %p %@", prefix, theStream, eventString(theStream,
streamEvent));
switch (streamEvent)
{
case NSStreamEventOpenCompleted:
{
if (theStream==clientOutput)
- writePointer = 0;
+ {
+ NSLog(@"%@ Client %p set write pointer to zero", prefix, theStream);
+ writePointer = 0;
+ }
break;
}
case NSStreamEventHasSpaceAvailable:
{
NSAssert(theStream==clientOutput, @"Wrong stream for writing");
- if (writePointer<[goldData length])
+ if (writePointer < [goldData length])
{
- int writeReturn = [clientOutput write: [goldData
bytes]+writePointer
- maxLength: [goldData length]-writePointer];
- NSLog(@"Client %p wrote %d", clientOutput, writeReturn);
+ int writeReturn;
+
+ writeReturn = [clientOutput write: [goldData bytes]+writePointer
+ maxLength: [goldData length]-writePointer];
+ NSLog(@"%@ Client %p wrote %d", prefix, theStream, writeReturn);
if (writeReturn < 0)
- NSLog(@"Error ... %@", [clientOutput streamError]);
+ NSLog(@"%@ Error ... %@", prefix, [theStream streamError]);
writePointer += writeReturn;
}
else
{
writePointer = 0;
- [clientOutput close];
- [clientOutput removeFromRunLoop: [NSRunLoop currentRunLoop]
- forMode: NSDefaultRunLoopMode];
- NSLog(@"Client close %p", clientOutput);
+ [theStream close];
+ [theStream removeFromRunLoop: [NSRunLoop currentRunLoop]
+ forMode: NSDefaultRunLoopMode];
+ NSLog(@"%@ Client close %p", prefix, theStream);
}
break;
}
case NSStreamEventHasBytesAvailable:
{
int readSize;
+
NSAssert(theStream==clientInput, @"Wrong stream for reading");
readSize = [clientInput read: buffer maxLength: 4096];
- NSLog(@"Client %p read %d", clientInput, readSize);
+ NSLog(@"%@ Client %p read %d", prefix, theStream, readSize);
if (readSize < 0)
{
- NSLog(@"Error ... %@", [clientInput streamError]);
+ NSLog(@"%@ Error ... %@", prefix, [theStream streamError]);
// it is possible that readSize<0 but not an Error.
// For example would block
}
else if (readSize == 0)
{
- [clientInput close];
- [clientInput removeFromRunLoop: [NSRunLoop currentRunLoop]
+ [theStream close];
+ [theStream removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
- NSLog(@"Client close %p", clientInput);
+ NSLog(@"%@ Client close %p", prefix, theStream);
}
else
{
@@ -83,16 +106,14 @@
}
case NSStreamEventEndEncountered:
{
+ [theStream setDelegate: nil];
[theStream close];
[theStream removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
- NSLog(@"Client close %p", theStream);
break;
}
case NSStreamEventErrorOccurred:
{
- NSLog(@"Error code is %d ... %@",
- [[theStream streamError] code], [theStream streamError]);
break;
}
default:
@@ -116,7 +137,7 @@
- (void)stream: (NSStream *)theStream handleEvent: (NSStreamEvent)streamEvent
{
-NSLog(@"Server %p %d", theStream, streamEvent);
+NSLog(@"%@ Server %p %@", prefix, theStream, eventString(theStream,
streamEvent));
switch (streamEvent)
{
case NSStreamEventHasBytesAvailable:
@@ -124,25 +145,36 @@
if (theStream==serverStream)
{
NSAssert(serverInput==nil, @"accept twice");
+NSLog(@"%@ Server %p %@ accepting incoming connection", prefix, theStream);
[serverStream acceptWithInputStream: &serverInput
outputStream: &serverOutput];
- if (serverInput) // it is ok to accept nothing
+ if (nil == serverInput) // it is ok to accept nothing
+ {
+NSLog(@"%@ Server %p %@ accept failed (no connection)", prefix, theStream);
+ }
+ else
{
NSRunLoop *rl = [NSRunLoop currentRunLoop];
+
[serverInput scheduleInRunLoop: rl
forMode: NSDefaultRunLoopMode];
[serverOutput scheduleInRunLoop: rl
forMode: NSDefaultRunLoopMode];
- NSLog(@"Server input stream is %p", serverInput);
- NSLog(@"Server output stream is %p", serverOutput);
- [serverInput retain];
- [serverOutput retain];
+ NSLog(@"%@ Server input stream is %p", prefix, serverInput);
+ NSLog(@"%@ Server output stream is %p", prefix, serverOutput);
+ RETAIN(serverInput);
+ RETAIN(serverOutput);
[serverInput setDelegate: self];
[serverOutput setDelegate: self];
[serverInput open];
[serverOutput open];
+ [serverInput scheduleInRunLoop: rl
+ forMode: NSDefaultRunLoopMode];
+ [serverOutput scheduleInRunLoop: rl
+ forMode: NSDefaultRunLoopMode];
readSize = 0;
writeSize = 0;
+ [serverStream setDelegate: nil];
[serverStream close];
[serverStream removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
@@ -162,25 +194,23 @@
}
case NSStreamEventEndEncountered:
{
+ [theStream setDelegate: nil];
[theStream close];
[theStream removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
- NSLog(@"Server close %p", theStream);
+ NSLog(@"%@ Server close %p", prefix, theStream);
if (theStream == serverInput && writeSize == readSize)
{
+ [serverOutput setDelegate: nil];
[serverOutput close];
[serverOutput removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
- NSLog(@"Server output close %p", serverOutput);
+ NSLog(@"%@ Server output close %p", prefix, serverOutput);
}
break;
}
case NSStreamEventErrorOccurred:
- {
- NSLog(@"Error code is %d ... %@",
- [[theStream streamError] code], [theStream streamError]);
- break;
- }
+ break;
default:
break;
}
@@ -192,22 +222,24 @@
{
readSize = [serverInput read: buffer maxLength: 4096];
readable = NO;
- NSLog(@"Server %p read %d", serverInput, readSize);
+ NSLog(@"%@ Server %p read %d", prefix, serverInput, readSize);
writeSize = 0;
if (readSize == 0)
{
+ [serverInput setDelegate: nil];
[serverInput close];
[serverInput removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
- NSLog(@"Server input close %p", serverInput);
+ NSLog(@"%@ Server input close %p", prefix, serverInput);
+ [serverOutput setDelegate: nil];
[serverOutput close];
[serverOutput removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
- NSLog(@"Server output close %p", serverOutput);
+ NSLog(@"%@ Server output close %p", prefix, serverOutput);
}
else if (readSize < 0)
{
- NSLog(@"Error ... %@", [clientInput streamError]);
+ NSLog(@"%@ Error ... %@", prefix, [clientInput streamError]);
readSize = 0;
}
}
@@ -215,18 +247,20 @@
{
int writeReturn = [serverOutput write: buffer+writeSize
maxLength: readSize-writeSize];
- NSLog(@"Server %p wrote %d", serverOutput, writeReturn);
+ NSLog(@"%@ Server %p wrote %d", prefix, serverOutput, writeReturn);
writable = NO;
if (writeReturn == 0)
{
+ [serverOutput setDelegate: nil];
[serverOutput close];
[serverOutput removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
- NSLog(@"Server close %p", serverOutput);
+ NSLog(@"%@ Server close %p", prefix, serverOutput);
+ [serverInput setDelegate: nil];
[serverInput close];
[serverInput removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
- NSLog(@"Server input close %p", serverInput);
+ NSLog(@"%@ Server input close %p", prefix, serverInput);
}
else if (writeReturn > 0)
{
@@ -234,7 +268,7 @@
}
else if (writeReturn < 0)
{
- NSLog(@"Error ... %@", [serverOutput streamError]);
+ NSLog(@"%@ Error ... %@", prefix, [serverOutput streamError]);
}
/* If we have finished writing and there is no more data coming,
@@ -243,10 +277,11 @@
if (writeSize == readSize
&& [serverInput streamStatus] == NSStreamStatusClosed)
{
+ [serverOutput setDelegate: nil];
[serverOutput close];
[serverOutput removeFromRunLoop: [NSRunLoop currentRunLoop]
forMode: NSDefaultRunLoopMode];
- NSLog(@"Server output close %p", serverOutput);
+ NSLog(@"%@ Server output close %p", prefix, serverOutput);
}
}
}
@@ -256,32 +291,38 @@
int main()
{
- NSAutoreleasePool *arp = [NSAutoreleasePool new];
+ CREATE_AUTORELEASE_POOL(arp);
NSRunLoop *rl = [NSRunLoop currentRunLoop];
NSHost *host = [NSHost hostWithAddress: @"127.0.0.1"];
ServerListener *sli;
ClientListener *cli;
NSString *path = @"socket_cs.m";
NSString *socketPath = @"test-socket";
+ NSDate *end;
[[NSFileManager defaultManager] removeFileAtPath: socketPath handler: nil];
NSLog(@"sending and receiving on %@: %@", host, [host address]);
goldData = [NSData dataWithContentsOfFile: path];
testData = [NSMutableData dataWithCapacity: 4096];
- sli = [ServerListener new];
- cli = [ClientListener new];
+{
+ CREATE_AUTORELEASE_POOL(inner);
+
+ prefix = @"Test1";
+ [testData setLength: 0];
+ sli = AUTORELEASE([ServerListener new]);
+ cli = AUTORELEASE([ClientListener new]);
serverStream
- = [GSServerStream serverStreamToAddr: [host address] port: 54321];
+ = [GSServerStream serverStreamToAddr: [host address] port: 1234];
[serverStream setDelegate: sli];
[serverStream scheduleInRunLoop: rl forMode: NSDefaultRunLoopMode];
[serverStream open];
[NSStream getStreamsToHost: host
- port: 54321
+ port: 1234
inputStream: &clientInput
outputStream: &clientOutput];
- NSLog(@"Client input stream is %p", clientInput);
- NSLog(@"Client output stream is %p", clientOutput);
+ NSLog(@"%@ Client input stream is %p", prefix, clientInput);
+ NSLog(@"%@ Client output stream is %p", prefix, clientOutput);
[clientInput setDelegate: cli];
[clientOutput setDelegate: cli];
[clientInput scheduleInRunLoop: rl forMode: NSDefaultRunLoopMode];
@@ -289,30 +330,37 @@
[clientInput open];
[clientOutput open];
- [rl runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 30]];
+ end = [NSDate dateWithTimeIntervalSinceNow: 5];
+ [rl runUntilDate: end];
PASS([goldData isEqualToData: testData], "Local tcp");
-
+ if ([end timeIntervalSinceNow] < 0.0)
+ NSLog(@"%@ timed out.\n", prefix);
+
+ [clientInput setDelegate: nil];
+ [clientOutput setDelegate: nil];
DESTROY(serverInput);
DESTROY(serverOutput);
- clientInput = nil;
- clientOutput = nil;
- DESTROY(sli);
- DESTROY(cli);
+ RELEASE(inner);
+}
+
+{
+ CREATE_AUTORELEASE_POOL(inner);
+
+ prefix = @"Test2";
[testData setLength: 0];
-
- sli = [ServerListener new];
- cli = [ClientListener new];
+ sli = AUTORELEASE([ServerListener new]);
+ cli = AUTORELEASE([ClientListener new]);
serverStream
- = [GSServerStream serverStreamToAddr: [host address] port: 54321];
+ = [GSServerStream serverStreamToAddr: [host address] port: 1234];
[serverStream setDelegate: sli];
[serverStream open];
[serverStream scheduleInRunLoop: rl forMode: NSDefaultRunLoopMode];
[NSStream getStreamsToHost: host
- port: 54321
+ port: 1234
inputStream: &clientInput
outputStream: &clientOutput];
- NSLog(@"Client input stream is %p", clientInput);
- NSLog(@"Client output stream is %p", clientOutput);
+ NSLog(@"%@ Client input stream is %p", prefix, clientInput);
+ NSLog(@"%@ Client output stream is %p", prefix, clientOutput);
[clientInput setDelegate: cli];
[clientOutput setDelegate: cli];
[clientInput open];
@@ -320,19 +368,26 @@
[clientInput scheduleInRunLoop: rl forMode: NSDefaultRunLoopMode];
[clientOutput scheduleInRunLoop: rl forMode: NSDefaultRunLoopMode];
- [rl runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 30]];
+ end = [NSDate dateWithTimeIntervalSinceNow: 5];
+ [rl runUntilDate: end];
PASS([goldData isEqualToData: testData], "Local tcp (blocking open)");
-
+ if ([end timeIntervalSinceNow] < 0.0)
+ NSLog(@"%@ timed out.\n", prefix);
+
+ [clientInput setDelegate: nil];
+ [clientOutput setDelegate: nil];
DESTROY(serverInput);
DESTROY(serverOutput);
- clientInput = nil;
- clientOutput = nil;
- DESTROY(sli);
- DESTROY(cli);
+ RELEASE(inner);
+}
+
+{
+ CREATE_AUTORELEASE_POOL(inner);
+
+ prefix = @"Test3";
[testData setLength: 0];
-
- sli = [ServerListener new];
- cli = [ClientListener new];
+ sli = AUTORELEASE([ServerListener new]);
+ cli = AUTORELEASE([ClientListener new]);
serverStream = [GSServerStream serverStreamToAddr: socketPath];
[serverStream setDelegate: sli];
[serverStream scheduleInRunLoop: rl forMode: NSDefaultRunLoopMode];
@@ -340,8 +395,8 @@
[NSStream getLocalStreamsToPath: socketPath
inputStream: &clientInput
outputStream: &clientOutput];
- NSLog(@"Client input stream is %p", clientInput);
- NSLog(@"Client output stream is %p", clientOutput);
+ NSLog(@"%@ Client input stream is %p", prefix, clientInput);
+ NSLog(@"%@ Client output stream is %p", prefix, clientOutput);
[clientInput setDelegate: cli];
[clientOutput setDelegate: cli];
[clientInput scheduleInRunLoop: rl forMode: NSDefaultRunLoopMode];
@@ -349,21 +404,29 @@
[clientInput open];
[clientOutput open];
- [rl runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 30]];
-
+ end = [NSDate dateWithTimeIntervalSinceNow: 5];
+ [rl runUntilDate: end];
PASS([goldData isEqualToData: testData], "Local socket");
-
+ if ([end timeIntervalSinceNow] < 0.0)
+ NSLog(@"%@ timed out.\n", prefix);
+
+ [clientInput setDelegate: nil];
+ [clientOutput setDelegate: nil];
DESTROY(serverInput);
DESTROY(serverOutput);
- clientInput = nil;
- clientOutput = nil;
- DESTROY(sli);
- DESTROY(cli);
+ RELEASE(inner);
+}
+
+{
+ CREATE_AUTORELEASE_POOL(inner);
+
+ prefix = @"Test4";
[testData setLength: 0];
+ sli = AUTORELEASE([ServerListener new]);
+ cli = AUTORELEASE([ClientListener new]);
+
[[NSFileManager defaultManager] removeFileAtPath: socketPath handler: nil];
- sli = [ServerListener new];
- cli = [ClientListener new];
serverStream = [GSServerStream serverStreamToAddr: socketPath];
[serverStream setDelegate: sli];
[serverStream open];
@@ -371,8 +434,8 @@
[NSStream getLocalStreamsToPath: socketPath
inputStream: &clientInput
outputStream: &clientOutput];
- NSLog(@"Client input stream is %p", clientInput);
- NSLog(@"Client output stream is %p", clientOutput);
+ NSLog(@"%@ Client input stream is %p", prefix, clientInput);
+ NSLog(@"%@ Client output stream is %p", prefix, clientOutput);
[clientInput setDelegate: cli];
[clientOutput setDelegate: cli];
[clientInput open];
@@ -380,20 +443,22 @@
[clientInput scheduleInRunLoop: rl forMode: NSDefaultRunLoopMode];
[clientOutput scheduleInRunLoop: rl forMode: NSDefaultRunLoopMode];
- [rl runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 30]];
-
+ end = [NSDate dateWithTimeIntervalSinceNow: 5];
+ [rl runUntilDate: end];
PASS([goldData isEqualToData: testData], "Local socket (blocking open)");
-
+ if ([end timeIntervalSinceNow] < 0.0)
+ NSLog(@"%@ timed out.\n", prefix);
+
+ [clientInput setDelegate: nil];
+ [clientOutput setDelegate: nil];
DESTROY(serverInput);
DESTROY(serverOutput);
- clientInput = nil;
- clientOutput = nil;
- DESTROY(sli);
- DESTROY(cli);
- [testData setLength: 0];
+ RELEASE(inner);
+}
+
[[NSFileManager defaultManager] removeFileAtPath: socketPath handler: nil];
- [arp release];
+ RELEASE(arp);
return 0;
}
#else
_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs