Files
wagic/projects/mtg/iOS/asi-http-request/Tests/ASICloudFilesRequestTests.m
techdragon.nguyen@gmail.com 128c60bc2b added download feature for iOS port
required libs: 
    * ZipArchive - Obj-C impl of zip
    * asi-http-request : http request help to assist with asynchoronous downloading of files
    * minizip : support for ZipArchive
    * 
Added default splash screen for iOS app.  (using the Wagic background to keep it neutral to module)

TODO: refine handling for iPad splash screen
    * add selection screen and input screen for location of downloadable content. (ie core files, image files, etc )
    * add support to opt out of backing up to iCloud for core files. Right now iOS will automatically backup all files under Documents folder to iCloud.  Consider only allowing player data to be backed up to iCloud.  All graphics and other assets are considered volatile.
2011-12-11 07:40:22 +00:00

339 lines
12 KiB
Objective-C

//
// ASICloudFilesRequestTests.m
//
// Created by Michael Mayo on 1/6/10.
//
#import "ASICloudFilesRequestTests.h"
// models
#import "ASICloudFilesContainer.h"
#import "ASICloudFilesObject.h"
// requests
#import "ASICloudFilesRequest.h"
#import "ASICloudFilesContainerRequest.h"
#import "ASICloudFilesObjectRequest.h"
#import "ASICloudFilesCDNRequest.h"
// Fill in these to run the tests that actually connect and manipulate objects on Cloud Files
static NSString *username = @"";
static NSString *apiKey = @"";
@implementation ASICloudFilesRequestTests
@synthesize networkQueue;
// Authenticate before any test if there's no auth token present
- (void)authenticate {
if (![ASICloudFilesRequest authToken]) {
[ASICloudFilesRequest setUsername:username];
[ASICloudFilesRequest setApiKey:apiKey];
[ASICloudFilesRequest authenticate];
}
}
// ASICloudFilesRequest
- (void)testAuthentication {
[self authenticate];
GHAssertNotNil([ASICloudFilesRequest authToken], @"Failed to authenticate and obtain authentication token");
GHAssertNotNil([ASICloudFilesRequest storageURL], @"Failed to authenticate and obtain storage URL");
GHAssertNotNil([ASICloudFilesRequest cdnManagementURL], @"Failed to authenticate and obtain CDN URL");
}
- (void)testDateParser {
ASICloudFilesRequest *request = [[[ASICloudFilesRequest alloc] init] autorelease];
NSDate *date = [request dateFromString:@"invalid date string"];
GHAssertNil(date, @"Should have failed to parse an invalid date string");
date = [request dateFromString:@"2009-11-04T19:46:20.192723"];
GHAssertNotNil(date, @"Failed to parse date string");
NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
[components setYear:2009];
[components setMonth:11];
[components setDay:4];
[components setHour:19];
[components setMinute:46];
[components setSecond:20];
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
NSDate *referenceDate = [calendar dateFromComponents:components];
// NSDateComponents has seconds as the smallest value, so we'll just check the created date is less than 1 second different from what we expect
NSTimeInterval timeDifference = [date timeIntervalSinceDate:referenceDate];
BOOL success = (timeDifference < 1.0);
GHAssertTrue(success, @"Parsed date incorrectly");
}
// ASICloudFilesContainerRequest
- (void)testAccountInfo {
[self authenticate];
ASICloudFilesContainerRequest *request = [ASICloudFilesContainerRequest accountInfoRequest];
[request startSynchronous];
GHAssertTrue([request containerCount] > 0, @"Failed to retrieve account info");
GHAssertTrue([request bytesUsed] > 0, @"Failed to retrieve account info");
}
- (void)testContainerList {
[self authenticate];
NSArray *containers = nil;
ASICloudFilesContainerRequest *containerListRequest = [ASICloudFilesContainerRequest listRequest];
[containerListRequest startSynchronous];
containers = [containerListRequest containers];
GHAssertTrue([containers count] > 0, @"Failed to list containers");
NSUInteger i;
for (i = 0; i < [containers count]; i++) {
ASICloudFilesContainer *container = [containers objectAtIndex:i];
GHAssertNotNil(container.name, @"Failed to parse container");
}
ASICloudFilesContainerRequest *limitContainerListRequest = [ASICloudFilesContainerRequest listRequestWithLimit:2 marker:nil];
[limitContainerListRequest startSynchronous];
containers = [limitContainerListRequest containers];
GHAssertTrue([containers count] == 2, @"Failed to limit container list");
}
- (void)testContainerCreate {
[self authenticate];
ASICloudFilesContainerRequest *createContainerRequest = [ASICloudFilesContainerRequest createContainerRequest:@"ASICloudFilesContainerTest"];
[createContainerRequest startSynchronous];
GHAssertTrue([createContainerRequest error] == nil, @"Failed to create container");
}
- (void)testContainerDelete {
[self authenticate];
ASICloudFilesContainerRequest *deleteContainerRequest = [ASICloudFilesContainerRequest deleteContainerRequest:@"ASICloudFilesContainerTest"];
[deleteContainerRequest startSynchronous];
GHAssertTrue([deleteContainerRequest error] == nil, @"Failed to delete container");
}
// ASICloudFilesObjectRequest
- (void)testContainerInfo {
[self authenticate];
// create a file first
ASICloudFilesContainerRequest *createContainerRequest = [ASICloudFilesContainerRequest createContainerRequest:@"ASICloudFilesTest"];
[createContainerRequest startSynchronous];
NSData *data = [@"this is a test" dataUsingEncoding:NSUTF8StringEncoding];
ASICloudFilesObjectRequest *putRequest
= [ASICloudFilesObjectRequest putObjectRequestWithContainer:@"ASICloudFilesTest"
objectPath:@"infotestfile.txt" contentType:@"text/plain"
objectData:data metadata:nil etag:nil];
[putRequest startSynchronous];
ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest containerInfoRequest:@"ASICloudFilesTest"];
[request startSynchronous];
GHAssertTrue([request containerObjectCount] > 0, @"Failed to retrieve container info");
GHAssertTrue([request containerBytesUsed] > 0, @"Failed to retrieve container info");
}
- (void)testObjectInfo {
[self authenticate];
ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest objectInfoRequest:@"ASICloudFilesTest" objectPath:@"infotestfile.txt"];
[request startSynchronous];
ASICloudFilesObject *object = [request object];
GHAssertNotNil(object, @"Failed to retrieve object");
GHAssertTrue([object.metadata count] > 0, @"Failed to parse metadata");
GHAssertTrue([object.metadata objectForKey:@"Test"] != nil, @"Failed to parse metadata");
}
- (void)testObjectList {
[self authenticate];
ASICloudFilesObjectRequest *objectListRequest = [ASICloudFilesObjectRequest listRequestWithContainer:@"ASICloudFilesTest"];
[objectListRequest startSynchronous];
NSArray *containers = [objectListRequest objects];
GHAssertTrue([containers count] > 0, @"Failed to list objects");
NSUInteger i;
for (i = 0; i < [containers count]; i++) {
ASICloudFilesObject *object = [containers objectAtIndex:i];
GHAssertNotNil(object.name, @"Failed to parse object");
}
}
- (void)testGetObject {
[self authenticate];
ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest getObjectRequestWithContainer:@"ASICloudFilesTest" objectPath:@"infotestfile.txt"];
[request startSynchronous];
ASICloudFilesObject *object = [request object];
GHAssertNotNil(object, @"Failed to retrieve object");
GHAssertNotNil(object.name, @"Failed to parse object name");
GHAssertTrue(object.bytes > 0, @"Failed to parse object bytes");
GHAssertNotNil(object.contentType, @"Failed to parse object content type");
GHAssertNotNil(object.lastModified, @"Failed to parse object last modified");
GHAssertNotNil(object.data, @"Failed to parse object data");
}
- (void)testPutObject {
[self authenticate];
ASICloudFilesContainerRequest *createContainerRequest
= [ASICloudFilesContainerRequest createContainerRequest:@"ASICloudFilesTest"];
[createContainerRequest startSynchronous];
NSData *data = [@"this is a test" dataUsingEncoding:NSUTF8StringEncoding];
ASICloudFilesObjectRequest *putRequest
= [ASICloudFilesObjectRequest putObjectRequestWithContainer:@"ASICloudFilesTest"
objectPath:@"puttestfile.txt" contentType:@"text/plain"
objectData:data metadata:nil etag:nil];
[putRequest startSynchronous];
GHAssertNil([putRequest error], @"Failed to PUT object");
ASICloudFilesObjectRequest *getRequest = [ASICloudFilesObjectRequest getObjectRequestWithContainer:@"ASICloudFilesTest" objectPath:@"puttestfile.txt"];
[getRequest startSynchronous];
ASICloudFilesObject *object = [getRequest object];
NSString *string = [[NSString alloc] initWithData:object.data encoding:NSASCIIStringEncoding];
GHAssertNotNil(object, @"Failed to retrieve new object");
GHAssertNotNil(object.name, @"Failed to parse object name");
GHAssertEqualStrings(object.name, @"puttestfile.txt", @"Failed to parse object name", @"Failed to parse object name");
GHAssertNotNil(object.data, @"Failed to parse object data");
GHAssertEqualStrings(string, @"this is a test", @"Failed to parse object data", @"Failed to parse object data");
ASICloudFilesContainerRequest *deleteContainerRequest = [ASICloudFilesContainerRequest deleteContainerRequest:@"ASICloudFilesTest"];
[deleteContainerRequest startSynchronous];
// Now put the object from a file
createContainerRequest = [ASICloudFilesContainerRequest createContainerRequest:@"ASICloudFilesTest"];
[createContainerRequest startSynchronous];
NSString *filePath = [[self filePathForTemporaryTestFiles] stringByAppendingPathComponent:@"cloudfile"];
[data writeToFile:filePath atomically:NO];
putRequest = [ASICloudFilesObjectRequest putObjectRequestWithContainer:@"ASICloudFilesTest" objectPath:@"puttestfile.txt" contentType:@"text/plain" file:filePath metadata:nil etag:nil];
[putRequest startSynchronous];
GHAssertNil([putRequest error], @"Failed to PUT object");
getRequest = [ASICloudFilesObjectRequest getObjectRequestWithContainer:@"ASICloudFilesTest" objectPath:@"puttestfile.txt"];
[getRequest startSynchronous];
object = [getRequest object];
GHAssertNotNil(object, @"Failed to retrieve new object");
GHAssertNotNil(object.name, @"Failed to parse object name");
GHAssertEqualStrings(object.name, @"puttestfile.txt", @"Failed to parse object name", @"Failed to parse object name");
GHAssertNotNil(object.data, @"Failed to parse object data");
GHAssertEqualStrings(string, @"this is a test", @"Failed to parse object data", @"Failed to parse object data");
[string release];
deleteContainerRequest = [ASICloudFilesContainerRequest deleteContainerRequest:@"ASICloudFilesTest"];
[deleteContainerRequest startSynchronous];
}
- (void)testPostObject {
[self authenticate];
NSMutableDictionary *metadata = [[NSMutableDictionary alloc] initWithCapacity:2];
[metadata setObject:@"test" forKey:@"Test"];
[metadata setObject:@"test" forKey:@"ASITest"];
ASICloudFilesObject *object = [ASICloudFilesObject object];
object.name = @"infotestfile.txt";
object.metadata = metadata;
ASICloudFilesObjectRequest *request = [ASICloudFilesObjectRequest postObjectRequestWithContainer:@"ASICloudFilesTest" object:object];
[request startSynchronous];
GHAssertTrue([request responseStatusCode] == 202, @"Failed to post object metadata");
[metadata release];
}
- (void)testDeleteObject {
[self authenticate];
ASICloudFilesObjectRequest *deleteRequest = [ASICloudFilesObjectRequest deleteObjectRequestWithContainer:@"ASICloudFilesTest" objectPath:@"puttestfile.txt"];
[deleteRequest startSynchronous];
GHAssertTrue([deleteRequest responseStatusCode] == 204, @"Failed to delete object");
}
#pragma mark -
#pragma mark CDN Tests
- (void)testCDNContainerInfo {
[self authenticate];
ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest containerInfoRequest:@"ASICloudFilesTest"];
[request startSynchronous];
GHAssertTrue([request responseStatusCode] == 204, @"Failed to retrieve CDN container info");
GHAssertTrue([request cdnEnabled], @"Failed to retrieve CDN container info");
GHAssertNotNil([request cdnURI], @"Failed to retrieve CDN container info");
GHAssertTrue([request cdnTTL] > 0, @"Failed to retrieve CDN container info");
}
- (void)testCDNContainerList {
[self authenticate];
ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest listRequest];
[request startSynchronous];
GHAssertNotNil([request containers], @"Failed to retrieve CDN container list");
}
- (void)testCDNContainerListWithParams {
[self authenticate];
ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest listRequestWithLimit:2 marker:nil enabledOnly:YES];
[request startSynchronous];
GHAssertNotNil([request containers], @"Failed to retrieve CDN container list");
GHAssertTrue([[request containers] count] == 2, @"Failed to retrieve limited CDN container list");
}
- (void)testCDNPut {
[self authenticate];
ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest putRequestWithContainer:@"ASICloudFilesTest"];
[request startSynchronous];
GHAssertNotNil([request cdnURI], @"Failed to PUT to CDN container");
}
- (void)testCDNPost {
[self authenticate];
ASICloudFilesCDNRequest *request = [ASICloudFilesCDNRequest postRequestWithContainer:@"ASICloudFilesTest" cdnEnabled:YES ttl:86600];
[request startSynchronous];
GHAssertNotNil([request cdnURI], @"Failed to POST to CDN container");
}
#pragma mark -
#pragma mark Memory Management
-(void)dealloc {
[networkQueue release];
[super dealloc];
}
@end