function UnitTest(dataStore, authManager, successCallback) {
    this.dataStore = dataStore;
    this.authManager = authManager;
    this.successCallback = successCallback;
    this.run = function() {
    	authManager.selfTest(function(){
	        dataStore.getDeviceCount(function(value) {
	            var drivers;
	            dataStore.getDriversSearch(function(value) {
	                if (value.error) { throw (value.error); }
	                drivers = value.result;
	                var devices;
	                dataStore.getDevicesSearch(function(value) {
	                    if (value.error) { throw (value.error); }
	                    devices = value.result;
	                    var viewport = {
	                        X: -179,
	                        Y: 80,
	                        Width: 378,
	                        Height: -178
	                    };
	                    dataStore.getZones(function(value) {
                        if (value.error) { throw (value.error); }
                        var zones = value.result;
	                        dataStore.getRoutes(function(value) {
	                            var orgNode = dataStore.getOrganizationNode();
	                            var nodes;
	                            dataStore.getSubTrees(function(value) {
	                                if (value.error) { throw (value.error); }
	                                nodes = value.result;
	                                dataStore.getDataStoreUser(function(value) {
	                                    var node = {};
	                                    node.Name = "test";
	                                    node.parent = orgNode;
	                                    dataStore.addNode(function(value) {
	                                        if (value.error) { throw (value.error); }
	                                        node = value.result;
	                                        node.Name = "test2";
	                                        dataStore.setNode(function() {
	                                            dataStore.removeNode(function() {
	                                                var fromDate = new Date();
	                                                fromDate.setTime(Date.UTC(2008, 6, 1));
	                                                var toDate = new Date();
	                                                toDate.setTime(Date.UTC(2008, 6, 1, 13, 0, 0));
	                                                successCallback();
	                                                return;
	                                                // TODO: timeout in getActivityDetailByDevice 
	                                                dataStore.getActivityDetailByDevice(function() {
	                                                    dataStore.getActivityDetailByDriver(function() {
	                                                        dataStore.getActivitySummaryByDevice(function() {
	                                                            dataStore.getActivitySummaryByDriver(function() {
	                                                                successCallback;
	                                                            }, fromDate, toDate, nodes, drivers, 180, true);
	                                                        }, fromDate, toDate, nodes, devices, 180, true);
	                                                    }, fromDate, toDate, nodes, drivers, true);
	                                                }, fromDate, toDate, nodes[0].Children, devices, true);
	                                            }, node);
	                                        }, node);
	                                    }, node);
	                                });
	                            }, orgNode);
	                        }, [], true, "%");
	                    }, [], true, "%", viewport);
	                }, [], true, "%");
	            }, [], true, "%");
	        });
    	});
    };
}
