You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@griffin.apache.org by gu...@apache.org on 2017/03/03 08:40:39 UTC

[05/50] [abbrv] incubator-griffin git commit: front end

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/karma.conf.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/karma.conf.js b/ui/tests/ut/karma.conf.js
new file mode 100644
index 0000000..4f8a5e1
--- /dev/null
+++ b/ui/tests/ut/karma.conf.js
@@ -0,0 +1,102 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+// Karma configuration
+// Generated on Thu Apr 07 2016 15:02:00 GMT+0800 (China Standard Time)
+//http://monicalent.com/blog/2015/02/11/karma-tests-angular-js-require-j/
+
+module.exports = function(config) {
+  config.set({
+
+    // base path that will be used to resolve all patterns (eg. files, exclude)
+    basePath: '../../',
+
+
+    // frameworks to use
+    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+    frameworks: ['jasmine', 'requirejs'],
+
+
+    files: [
+      'tests/ut/test-main.js',
+      {pattern:'bower_components/**/*.js', included:false},
+      {pattern:'node_modules/angular-mocks/angular-mocks.js', included:false},
+      {pattern: 'js/**/*.js', included: false},
+      {pattern: 'tests/**/*spec.js', included: false}
+    ],
+
+
+    // list of files to exclude
+    exclude: [
+      'js/main.js',
+      'js/bs.js',
+      'js/routes.js',
+      'bower_components/**/*test*/**/*.js',
+      'bower_components/**/*spec.js',
+      // 'node_modules/**/*spec.js',
+      // 'node_modules/**/*spec*/**/*.js',
+      // 'node_modules/**/*test.js'
+    ],
+
+
+    // preprocess matching files before serving them to the browser
+    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
+    preprocessors: {
+      'js/**/*.js':['coverage']
+    },
+
+    coverageReporter: {
+        type:'lcov',
+        dir: 'tests/ut/test-coverage'
+    },
+
+
+    // test results reporter to use
+    // possible values: 'dots', 'progress'
+    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
+    // reporters: ['progress'],
+    reporters: ['mocha', 'coverage', 'progress'],
+
+
+    // web server port
+    port: 9876,
+
+
+    // enable / disable colors in the output (reporters and logs)
+    colors: true,
+
+
+    // level of logging
+    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+    logLevel: config.LOG_DEBUG,
+
+
+    // enable / disable watching file and executing tests whenever any file changes
+    autoWatch: true,
+
+
+    // start these browsers
+    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
+    browsers: ['Chrome'],
+
+
+    // Continuous Integration mode
+    // if true, Karma captures browsers, runs the tests and exits
+    singleRun: false,
+
+    // Concurrency level
+    // how many browser should be started simultaneous
+    concurrency: Infinity
+  })
+}

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/createrule-ac-ctrl.spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/createrule-ac-ctrl.spec.js b/ui/tests/ut/specs/controllers/createrule-ac-ctrl.spec.js
new file mode 100644
index 0000000..bf34dcb
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/createrule-ac-ctrl.spec.js
@@ -0,0 +1,129 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/controllers/createrule-ac-ctrl'],
+  function(angular, mocks, CreateRuleACCtrl) {
+    describe('Test /js/controllers/createrule-ac-ctrl.js', function(){
+      	beforeEach(function(){
+	        module('app.controllers');
+	        module('app.services');
+      	});
+    	var $scope, $rootScope, $controller, $httpBackend, $config, $location, toaster, $timeout, $route;
+	    beforeEach(inject(function(_$rootScope_ , _$controller_, _$httpBackend_, _$config_, _$location_, _$timeout_){
+	    	$rootScope = _$rootScope_;
+	    	$controller = _$controller_;
+	        $httpBackend = _$httpBackend_;
+	        $config = _$config_;
+	        $location = _$location_;
+	        $timeout = _$timeout_;
+	        $route = {};
+	        toaster = {};
+	    }));
+
+        beforeEach(function(){
+          	$scope =  $rootScope.$new();
+	        controller = $controller('CreateRuleACCtrl', {$scope: $scope, $route: $route, toaster: toaster });
+        });
+
+        describe("if the controller of CreateRuleACCtrl exists",function(){
+        	it('controller exists', function(){
+	          	expect(controller).toBeDefined();
+	        });
+        })
+
+        describe("check if parameters are available",function(){
+
+	        it('if the controller exists', function(){
+	          	expect(controller).toBeDefined();
+	        });
+
+	        it('$scope.value and $config.value should be right', function(){
+	          	expect($scope.currentStep).toBe(1);
+	          	expect(typeof $scope.selection).toEqual("object");
+	          	expect($config.uri.dbtree).toBeTruthy();
+	          	expect($config.uri.schemadefinition).toBeTruthy();
+	        });
+
+	        it('$scope.ruleTypes should be right', function(){
+	          	expect($scope.ruleTypes).toEqual(['Accuracy', 'Validity', 'Anomaly Detection', 'Publish Metrics']);
+	        });
+
+      	})
+
+      	describe("check if function are work",function(){
+
+	        it('$scope.selectNodeLabelTarget  works well', function(){
+	          expect($scope.selectNodeLabelTarget ).toBeDefined();
+	        });
+
+	        it('$scope.toggleSelection works well', function(){
+	          expect($scope.toggleSelection).toBeDefined();
+	        });
+
+	        it('$scope.toggleAll works well', function(){
+	          expect($scope.toggleAll).toBeDefined();
+	        });
+
+	        it('$scope.form is a object', function(){
+	          expect(typeof $scope.form).toBe("object");
+	        });
+
+      	})
+
+      	describe("$scope.form test",function(){
+
+        	it('the type of $scope.form', function(){
+	          	expect(typeof $scope.form).toBe("object");
+	        });
+
+	        it('the type of $scope.form.submit', function(){
+	          	expect(typeof $scope.form.submit).toBe('function');
+	        });
+
+	        it('the type of $scope.form.save', function(){
+	          	expect(typeof $scope.form.save).toBe('function');
+	        });
+
+        })
+
+        describe("httpGet $config.uri.dbtree test",function(){
+	        beforeEach(function(){
+	            $httpBackend.when('GET', $config.uri.dbtree).respond({"age": 16,"name": "li"});
+	            $httpBackend.when('GET', $config.uri.schemadefinition).respond({"age": 16,"name": "li"});
+	        });
+
+	        it('http response', function(){
+	          $httpBackend.flush();
+	          expect($scope.dbListTarget).toBeTruthy();
+	        });
+
+	   		it('test watch and http request', function(){
+	   			$scope.currentNode = {"name":"ha"};
+		      	$scope.$digest();
+
+		      	$httpBackend.flush();
+		      	expect($scope.selection.length).toBe(0);
+		      	expect($scope.selectedAll).toBe(false);
+
+		      	expect($scope.schemaCollection.age).toBe(16);
+	   		});
+
+	      	afterEach(function() {
+	        	$httpBackend.verifyNoOutstandingExpectation();
+	        	$httpBackend.verifyNoOutstandingRequest();
+	      	});
+	    })
+    });
+  }
+)

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/createrule-pu-ctrl.spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/createrule-pu-ctrl.spec.js b/ui/tests/ut/specs/controllers/createrule-pu-ctrl.spec.js
new file mode 100644
index 0000000..9bf9af2
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/createrule-pu-ctrl.spec.js
@@ -0,0 +1,105 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/controllers/createrule-pu-ctrl'],
+  function(angular, mocks, CreateRulePUCtrl) {
+    describe('Test /js/controllers/createrule-pu-ctrl.js', function(){
+      	beforeEach(function(){
+	        module('app.controllers');
+	        module('app.services');
+      	});
+    	var $scope, $rootScope, $controller, $httpBackend, $config, $location, toaster, $timeout, $route;
+	    beforeEach(inject(function(_$rootScope_ , _$controller_, _$httpBackend_, _$config_, _$location_, _$timeout_){
+	    	$rootScope = _$rootScope_;
+	    	$controller = _$controller_;
+	        $httpBackend = _$httpBackend_;
+	        $config = _$config_;
+	        $location = _$location_;
+	        $timeout = _$timeout_;
+	        $route = {};
+	        toaster = ['error', 'Error', "hello", "lisan"];/*test data*/
+	    }));
+
+        beforeEach(function(){
+          	$scope =  $rootScope.$new();
+	        controller = $controller('CreateRulePUCtrl', {$scope: $scope, $route: $route, toaster: toaster });
+        });
+
+        describe("if the controller of CreateRulePUCtrl exists",function(){
+        	it('controller exists', function(){
+	          	expect(controller).toBeDefined();
+	        });
+        })
+
+        describe("$scope.value",function(){
+
+        	it('$scope.currentStep == 1', function(){
+	          	expect($scope.currentStep).toBe(1);
+	        });
+
+	        it('$scope.scheduleTypes', function(){
+	          	expect($scope.scheduleTypes).toEqual(['Daily', 'Weekly', 'Monthly', 'Hourly']);
+	        });
+
+        })
+
+        describe("$scope.form test",function(){
+
+        	it('the type of $scope.form', function(){
+	          	expect(typeof $scope.form).toBe("object");
+	        });
+
+	        it('the type of $scope.form.submit', function(){
+	          	expect(typeof $scope.form.submit).toBe('function');
+	        });
+
+	        it('the type of $scope.form.save', function(){
+	          	expect(typeof $scope.form.save).toBe('function');
+	        });
+
+        })
+
+        /*describe("function errorMessage() test",function(){
+        	// test function
+        	it('errorMessage', function(){
+	          	var message = ["hello"];
+	          	var i = 2;
+	          	var msg = true;
+	          	$scope.errorMessage(i,msg);
+	          	expect(toaster).toEqual(['error', 'Error',"hello"]);
+	        });
+
+        })*/
+
+        describe('Testing $watch expressions', function() {
+		    it('test using $digest', function() {
+		    	var form = {};
+		    	form.basic = {"name": "li"};
+		    	form.publishUrl = "publishUrl";
+		    	$scope.form = form;
+		      	form.basic.name = "ha";
+		      	$scope.$digest();
+		      	form.basic.name = "la";
+		      	$scope.$digest();
+
+		      	expect($scope.form.publishUrl).toEqual('http://dq.vip.ebay.com/api/v1/publishmetric/la');
+
+		    });
+		});
+
+
+
+    });
+  }
+)

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/createrule-va-ctrl.spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/createrule-va-ctrl.spec.js b/ui/tests/ut/specs/controllers/createrule-va-ctrl.spec.js
new file mode 100644
index 0000000..990ef4e
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/createrule-va-ctrl.spec.js
@@ -0,0 +1,110 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/controllers/createrule-va-ctrl'],
+  function(angular, mocks, CreateRuleVACtrl) {
+    describe('Test /js/controllers/createrule-va-ctrl.js', function(){
+      	beforeEach(function(){
+	        module('app.controllers');
+	        module('app.services');
+      	});
+    	var $scope, $rootScope, $controller, $httpBackend, $config, $location, toaster, $timeout, $route;
+	    beforeEach(inject(function(_$rootScope_ , _$controller_, _$httpBackend_, _$config_, _$location_, _$timeout_){
+	    	$rootScope = _$rootScope_;
+	    	$controller = _$controller_;
+	        $httpBackend = _$httpBackend_;
+	        $config = _$config_;
+	        $location = _$location_;
+	        $timeout = _$timeout_;
+	        $route = {};
+	        toaster = {};
+	    }));
+
+        beforeEach(function(){
+          	$scope =  $rootScope.$new();
+	        controller = $controller('CreateRuleVACtrl', {$scope: $scope, $route: $route, toaster: toaster });
+        });
+
+        describe("if the controller of CreateRuleVACtrl exists",function(){
+        	it('controller exists', function(){
+	          	expect(controller).toBeDefined();
+	        });
+        })
+
+        describe("check if parameters are available",function(){
+
+	        it('$scope.value and $config.value should be right', function(){
+	          	expect($scope.currentStep).toBe(1);
+	          	expect($config.uri.dbtree).toBeTruthy();
+	          	expect($config.uri.schemadefinition).toBeTruthy();
+	        });
+
+	        it('$scope.ruleTypes should be right', function(){
+	          	expect($scope.ruleTypes).toEqual(['Accuracy', 'Validity', 'Anomaly Detection', 'Publish Metrics']);
+	        });
+
+      	})
+
+      	describe("check if form function are work",function(){
+
+	        it('$scope.form is a object', function(){
+	          expect(typeof $scope.form).toBe("object");
+	        });
+
+      	})
+
+      	describe("$scope.form test",function(){
+
+        	it('the type of $scope.form', function(){
+	          	expect(typeof $scope.form).toBe("object");
+	        });
+
+	        it('the type of $scope.form.submit', function(){
+	          	expect(typeof $scope.form.submit).toBe('function');
+	        });
+
+	        it('the type of $scope.form.save', function(){
+	          	expect(typeof $scope.form.save).toBe('function');
+	        });
+
+        })
+
+      	describe("httpGet $config.uri.dbtree test",function(){
+	        beforeEach(function(){
+	            $httpBackend.when('GET', $config.uri.dbtree).respond({"age": 16,"name": "li"});
+	            $httpBackend.when('GET', $config.uri.schemadefinition).respond({"age": 15,"name": "wei"});
+	        });
+
+	        it('http response', function(){
+	        	$httpBackend.flush();
+	          	expect($scope.dbList).toBeTruthy();
+	        });
+
+	        it('test watch and http request', function(){
+	   			$scope.currentNode = {"name":"ha"};
+		      	$scope.$digest();
+
+		      	$httpBackend.flush();
+		      	expect($scope.schemaCollection.age).toBe(15);
+	   		});
+
+	      	afterEach(function() {
+	        	$httpBackend.verifyNoOutstandingExpectation();
+	        	$httpBackend.verifyNoOutstandingRequest();
+	      	});
+	    })
+
+    });
+  }
+)

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/createrule0-ctrl.spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/createrule0-ctrl.spec.js b/ui/tests/ut/specs/controllers/createrule0-ctrl.spec.js
new file mode 100644
index 0000000..8df4af1
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/createrule0-ctrl.spec.js
@@ -0,0 +1,62 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/controllers/createrule0-ctrl'],
+  function(angular, mocks, CreateRule0Ctrl) {
+    describe('Test /js/controllers/createrule0-ctrl.js', function(){
+      	beforeEach(function(){
+	        module('app.controllers');
+	        module('app.services');
+      	});
+    	var $scope, $rootScope, $controller, $httpBackend, $config, $location, toaster, $timeout;
+
+	    beforeEach(inject(function(_$rootScope_ , _$controller_, _$httpBackend_, _$config_, _$location_, _$timeout_){
+	    	$rootScope = _$rootScope_;
+	    	$controller = _$controller_;
+	        $httpBackend = _$httpBackend_;
+	        $config = _$config_;
+	        $location = _$location_;
+	        $timeout = _$timeout_;
+	        toaster = {};
+	    }));
+
+        beforeEach(function(){
+          	$scope =  $rootScope.$new();
+	        controller = $controller('CreateRule0Ctrl', {$scope: $scope, toaster: toaster });
+        });
+
+        describe("if the controller of CreateRule0Ctrl exists",function(){
+        	it('controller exists', function(){
+	          	expect(controller).toBeDefined();
+	        });
+        })
+
+        describe("if the $scope.click exists",function(){
+
+        	it('$scope.click', function(){
+	          	expect($scope.click).toBeDefined();
+	        });
+
+	        it('should change location when setting it via click function', inject(function() {
+		        var url = '/index';
+		        $scope.click(url);
+		        spyOn($location, 'path').and.returnValue(url);
+		    }));
+
+        })
+
+
+    });
+  }
+)

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/health-ctrl.spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/health-ctrl.spec.js b/ui/tests/ut/specs/controllers/health-ctrl.spec.js
new file mode 100644
index 0000000..b35e40a
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/health-ctrl.spec.js
@@ -0,0 +1,73 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['require', 'angular', 'angularMocks', 'js/controllers/health-ctrl', 'echarts'],
+  function(require, angular, mocks, HealthCtrl) {
+    describe('Test /js/controllers/health-ctrl.js', function(){
+      	beforeEach(function(){
+	        module('app.controllers');
+	        module('app.services');
+      	});
+    	var $scope, $rootScope, $controller, $httpBackend, $config, $location, toaster, $timeout, $route;
+
+	    beforeEach(inject(function(_$rootScope_ , _$controller_, _$httpBackend_, _$config_, _$location_, _$timeout_){
+	    	$rootScope = _$rootScope_;
+	    	$controller = _$controller_;
+	        $httpBackend = _$httpBackend_;
+	        $config = _$config_;
+	        $location = _$location_;
+	        $timeout = _$timeout_;
+	        toaster = {};
+	        $route = {};
+	    }));
+
+        beforeEach(function(){
+          	$scope =  $rootScope.$new();
+	        controller = $controller('HealthCtrl', {$scope: $scope, $route: $route, toaster: toaster });
+        });
+
+        describe("if the controller of HealthCtrl exists",function(){
+        	it('controller exists', function(){
+	          	expect(controller).toBeDefined();
+	        });
+        })
+
+        describe("check if parameters are available",function(){
+
+	        it('$scope.value and $config.value should be right', function(){
+	          	expect($config.uri.heatmap).toBeTruthy();
+	        });
+
+      	})
+
+      	describe("httpGet $config.uri.dbtree test",function(){
+	        beforeEach(function(){
+	            $httpBackend.when('GET', $config.uri.heatmap).respond([{"name":"unknown","dq":0.0,"metrics":[{"name":"mean","dq":4835.3,"dqfail":0,"timestamp":1470387389994,"metricType":"","assetName":null,"details":[]},{"name":"test1001","dq":1638.6,"dqfail":0,"timestamp":1470387312289,"metricType":"","assetName":null,"details":[]},{"name":"test_publish","dq":99.8,"dqfail":0,"timestamp":1463994766925,"metricType":"","assetName":null,"details":[]},{"name":"v","dq":99.8,"dqfail":0,"timestamp":1463994766925,"metricType":"","assetName":null,"details":[]}]},{"name":"Hadoop","dq":0.0,"metrics":[{"name":"movie_acc","dq":97.0,"dqfail":0,"timestamp":1470009600000,"metricType":"","assetName":null,"details":[]},{"name":"movie_acc_test2","dq":97.0,"dqfail":0,"timestamp":1470009600000,"metricType":"","assetName":null,"details":[]},{"name":"hadoop_accuracy_1","dq":99.053,"dqfail":0,"timestamp":1467356400000,"metricType":"","assetName":null,"details":[]}]},{"name":"Bullseye","dq":0.0,"metrics":[{"na
 me":"test_accuracy_1","dq":98.952,"dqfail":1,"timestamp":1467439200000,"metricType":"","assetName":null,"details":[]},{"name":"test_accuracy_2","dq":99.103,"dqfail":0,"timestamp":1467439200000,"metricType":"","assetName":null,"details":[]},{"name":"TotalCount_asset1","dq":5056215.0,"dqfail":0,"timestamp":1467439200000,"metricType":"","assetName":null,"details":[]},{"name":"TotalCount_asset2","dq":1.229703E7,"dqfail":0,"timestamp":1467356400000,"metricType":"","assetName":null,"details":[]},{"name":"aw","dq":5056215.0,"dqfail":0,"timestamp":1467439200000,"metricType":"Bollinger","assetName":null,"details":[]}]}]);
+	            $httpBackend.flush();
+	        });
+
+	        it('http response', function(){
+	          // expect($scope.dbList).toBeTruthy();
+	        });
+
+	      	afterEach(function() {
+	        	$httpBackend.verifyNoOutstandingExpectation();
+	        	$httpBackend.verifyNoOutstandingRequest();
+	      	});
+	    })
+
+
+    });
+  }
+)

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/metrics-ctrl.spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/metrics-ctrl.spec.js b/ui/tests/ut/specs/controllers/metrics-ctrl.spec.js
new file mode 100644
index 0000000..0036101
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/metrics-ctrl.spec.js
@@ -0,0 +1,76 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/controllers/metrics-ctrl'],
+  function(angular, mocks, MetricsCtrl) {
+    describe('Test /js/controllers/metrics-ctrl.js', function(){
+      	beforeEach(function(){
+	        module('app.controllers');
+	        module('app.services');
+      	});
+    	var $rootScope, $controller, $httpBackend, $config, $filter, $routeParams, $timeout, $compile, $route;
+	    beforeEach(inject(function(_$rootScope_, _$controller_, _$httpBackend_, _$config_, _$filter_, _$timeout_, _$compile_){
+	        $rootScope = _$rootScope_;
+	        $controller = _$controller_;
+	        $httpBackend = _$httpBackend_;
+	        $config = _$config_;
+	        $filter = _$filter_;
+	        $routeParams = {};
+	        // $routeParams.siteId = 'abc';
+	        $timeout = _$timeout_;
+	        $compile = _$compile_;
+	        $route = {};
+	    }));
+
+    	describe("function test",function(){
+	        var $scope;
+
+	        beforeEach(function(){
+	          	$scope =  $rootScope.$new();
+		        controller = $controller('MetricsCtrl', {$scope: $scope, $route: $route, $routeParams: $routeParams});
+	        });
+
+	        it('controller exists', function(){
+	        	// var controller = $controller('MetricsCtrl', {$scope: $scope, $routeParams: $routeParams});
+	          	expect(controller).toBeDefined();
+	        });
+
+	        it('$config.uri.dashboard', function(){
+	          	expect($config.uri.dashboard).toBeTruthy();
+	        });
+
+	        it('$scope.showBig works well', function(){
+	          expect($scope.showBig).toBeDefined();
+	        });
+
+	        describe("http test",function(){
+		        beforeEach(function(){
+	                $httpBackend.when('GET', $config.uri.dashboard).respond({"age": 16,"name": "li"});
+		            $httpBackend.flush();
+		        });
+
+		        it('http response', function(){
+		          expect($scope.dashboard.age).toBe(16);
+		        });
+
+	          	afterEach(function() {
+	            	$httpBackend.verifyNoOutstandingExpectation();
+	            	$httpBackend.verifyNoOutstandingRequest();
+	          	});
+	        })
+
+      	})
+    });
+  }
+)

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/nav-ctrl_spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/nav-ctrl_spec.js b/ui/tests/ut/specs/controllers/nav-ctrl_spec.js
new file mode 100644
index 0000000..b4549fb
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/nav-ctrl_spec.js
@@ -0,0 +1,47 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/controllers/nav-ctrl'],
+  function(angular, mocks, navCtrl) {
+    describe('Test /js/controllers/nav-ctrl.js', function(){
+      beforeEach(function(){
+        module('app.controllers');
+        module('app.services');
+      });
+    	var $controller, $config, $httpBackend, $location;
+
+    	beforeEach(inject(function(_$controller_, _$config_, _$httpBackend_, _$location_){
+    	    $controller = _$controller_;
+    	    $config = _$config_;
+    	    $httpBackend = _$httpBackend_;
+          $location = _$location_;
+    	}));
+
+      describe('$scope functions are set properly', function(){
+        var $scope;
+
+        beforeEach(function(){
+          $scope = {};
+          $controller('NavCtrl', {$scope:$scope});
+        })
+
+        it('$scope.isActive is defined correctly', function(){
+          $location.path('/home');
+          expect($scope.isActive('/home')).toBeTruthy();
+        });
+
+      });
+    });
+  }
+);

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/rule-ctrl.spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/rule-ctrl.spec.js b/ui/tests/ut/specs/controllers/rule-ctrl.spec.js
new file mode 100644
index 0000000..c5b0df8
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/rule-ctrl.spec.js
@@ -0,0 +1,57 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/controllers/rule-ctrl'],
+  function(angular, mocks, RuleCtrl) {
+    describe('Test /js/controllers/rule-ctrl.js', function(){
+      	beforeEach(function(){
+	        module('app.controllers');
+	        module('app.services');
+      	});
+    	var $scope, $rootScope, $controller, $httpBackend, $config, $location, toaster, $timeout, $route;
+
+	    beforeEach(inject(function(_$rootScope_ , _$controller_, _$httpBackend_, _$config_, _$location_, _$timeout_){
+	    	$rootScope = _$rootScope_;
+	    	$controller = _$controller_;
+	        $httpBackend = _$httpBackend_;
+	        $config = _$config_;
+	        $location = _$location_;
+	        $timeout = _$timeout_;
+	        toaster = {};
+	        $route = {};
+	    }));
+
+        beforeEach(function(){
+          	$scope =  $rootScope.$new();
+	        controller = $controller('RuleCtrl', {$scope: $scope, $route: $route, toaster: toaster });
+        });
+
+        describe("if the controller of RuleCtrl exists",function(){
+        	it('controller exists', function(){
+	          	expect(controller).toBeDefined();
+	        });
+        })
+
+        describe("check if createRowCollection",function(){
+
+	        it('createRowCollection', function(){
+	          	expect($scope.rowCollection).not.toEqual([]);
+	        });
+
+      	})
+
+
+    });
+  }
+)

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/sidebar-ctrl_spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/sidebar-ctrl_spec.js b/ui/tests/ut/specs/controllers/sidebar-ctrl_spec.js
new file mode 100644
index 0000000..5b5a949
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/sidebar-ctrl_spec.js
@@ -0,0 +1,89 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/controllers/sidebar-ctrl'],
+  function(angular, mocks, sidebarCtrl) {
+    describe('Test /js/controllers/sidebar-ctrl.js', function(){
+      beforeEach(function(){
+        module('app.controllers');
+        module('app.services');
+      });
+    	var $controller, $httpBackend, $config, $filter, $timeout, $compile;
+      beforeEach(inject(function(_$controller_, _$httpBackend_, _$config_, _$filter_, _$timeout_, _$compile_){
+          $controller = _$controller_;
+          $httpBackend = _$httpBackend_;
+          $config = _$config_;
+          $filter = _$filter_;
+          $timeout = _$timeout_;
+          $compile = _$compile_;
+      }));
+
+    	describe("http unit test",function(){
+        var $scope;
+        beforeEach(function(){
+          $scope = {};
+          $controller('SideBarCtrl', {$scope:$scope});
+        })
+        it('$scope.str works well', function(){
+          // expect($scope.str).toEqual("hello");
+        });
+        it('url works well', function(){
+          expect($config.uri.statistics).toBeTruthy();
+        });
+        it('function resizeSidebar() works well', function(){
+          // expect($scope.resizeSidebar).toBeDefined();
+        });
+        describe("http get test",function(){
+          beforeEach(function(){
+                $httpBackend.when('GET', $config.uri.statistics).respond(
+                    {
+                      "assets": 16,
+                      "metrics": 20,
+                      "status":{
+                        "health": 16,
+                        "warn": 3,
+                        "invalid": 1
+                      }
+                    }
+                );
+
+                $httpBackend.when('GET', $config.uri.briefmetrics).respond(
+                    {
+                      "assets": 16,
+                      "metrics": 20,
+                      "status":{
+                        "health": 16,
+                        "warn": 3,
+                        "invalid": 1
+                      }
+                    }
+                );
+                $httpBackend.flush();
+          });
+
+          it("$scope.chartConfig is defined", function(){
+              expect($scope.chartConfig).toBeDefined();
+          });
+
+          afterEach(function() {
+            $httpBackend.verifyNoOutstandingExpectation();
+            $httpBackend.verifyNoOutstandingRequest();
+          });
+        })
+
+
+      })
+    });
+  }
+)

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/controllers/viewrule-ctrl.spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/controllers/viewrule-ctrl.spec.js b/ui/tests/ut/specs/controllers/viewrule-ctrl.spec.js
new file mode 100644
index 0000000..1aa3c61
--- /dev/null
+++ b/ui/tests/ut/specs/controllers/viewrule-ctrl.spec.js
@@ -0,0 +1,72 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/controllers/viewrule-ctrl'],
+  function(angular, mocks, ViewRuleCtrl) {
+    describe('Test /js/controllers/viewrule-ctrl.js', function(){
+      	beforeEach(function(){
+	        module('app.controllers');
+	        module('app.services');
+      	});
+    	var $scope, $rootScope, $controller, $filter, $httpBackend, $config, $location, toaster, $timeout, $compile;
+
+	    beforeEach(inject(function(_$rootScope_ , _$controller_, _$filter_, _$httpBackend_, _$config_, _$location_, _$timeout_, _$compile_){
+	    	$rootScope = _$rootScope_;
+	    	$controller = _$controller_;
+	    	$filter = _$filter_;
+	        $httpBackend = _$httpBackend_;
+	        $config = _$config_;
+	        $location = _$location_;
+	        $timeout = _$timeout_;
+	        toaster = {};
+	        $compile = _$compile_;
+	    }));
+
+        beforeEach(function(){
+          	$scope =  $rootScope.$new();
+	        controller = $controller('ViewRuleCtrl', {$scope: $scope, toaster: toaster});
+        });
+
+        describe("if the controller of ViewRuleCtrl exists",function(){
+        	it('controller exists', function(){
+	          	expect(controller).toBeDefined();
+	        });
+        })
+
+        describe("check if parameters are available",function(){
+	        it('$scope.value and $config.value should be right', function(){
+	          	expect($config.uri.rulemetric).toBeTruthy();
+	        });
+      	})
+
+      	describe("httpGet $config.uri.rulemetric test",function(){
+	        beforeEach(function(){
+	            $httpBackend.when('GET', $config.uri.rulemetric).respond({"age": 16,"name": "li"});
+	            $httpBackend.flush();
+	        });
+
+	        it('http response', function(){
+	          // expect($scope.dbList).toBeTruthy();
+	        });
+
+	      	afterEach(function() {
+	        	$httpBackend.verifyNoOutstandingExpectation();
+	        	$httpBackend.verifyNoOutstandingRequest();
+	      	});
+	    })
+
+
+    });
+  }
+)

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/filters/strmap_spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/filters/strmap_spec.js b/ui/tests/ut/specs/filters/strmap_spec.js
new file mode 100644
index 0000000..a2bbee0
--- /dev/null
+++ b/ui/tests/ut/specs/filters/strmap_spec.js
@@ -0,0 +1,33 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/filters/strmap'],
+  function(angular, mocks, filter) {
+
+    describe('Test /js/filters/strmap.js', function() {
+      beforeEach(module('app.filters'));
+
+      // Our first test!!!!
+      it('map correctly for index', mocks.inject(function($filter) {
+        // console.log($filter('strShorten')('1234567890123444444'));
+        var arr = ['Apple', 'Orange', 'Pale'];
+        expect($filter('strmap')(0, arr)).toEqual(arr[0]);
+        expect($filter('strmap')(3, arr)).toEqual(3);
+
+      }));
+
+
+    });
+  }
+);

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/filters/strshorten_spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/filters/strshorten_spec.js b/ui/tests/ut/specs/filters/strshorten_spec.js
new file mode 100644
index 0000000..e6ffa7d
--- /dev/null
+++ b/ui/tests/ut/specs/filters/strshorten_spec.js
@@ -0,0 +1,38 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/filters/strshorten'],
+  function(angular, mocks, filter) {
+
+    describe('Test /js/filters/strshorten.js', function() {
+      beforeEach(module('app.filters'));
+      // Here we register the function returned by the myFilter AMD module
+      // beforeEach(mocks.module(function($filterProvider) {
+      //   $filterprovider.register('stringsFilter', filter);
+      // }));
+
+      // Our first test!!!!
+      it('string should be shorten', mocks.inject(function($filter) {
+        // console.log($filter('strShorten')('1234567890123444444'));
+        expect($filter('strShorten')('abcde')).toEqual('abcde');
+        expect($filter('strShorten')('1234567890123444444')).toEqual('123456789012...');
+      }));
+
+      // it('should be true', function(){
+      //   expect(1).not.toBeNull();
+      // });
+
+    });
+  }
+);

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/specs/services/services_spec.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/specs/services/services_spec.js b/ui/tests/ut/specs/services/services_spec.js
new file mode 100644
index 0000000..8709dc1
--- /dev/null
+++ b/ui/tests/ut/specs/services/services_spec.js
@@ -0,0 +1,37 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+define(['angular', 'angularMocks', 'js/services/services'],
+  function(angular, mocks, filter) {
+
+    describe('Test /js/services/services.js', function() {
+      beforeEach(module('app.services'));
+      // Here we register the function returned by the myFilter AMD module
+      // beforeEach(mocks.module(function($filterProvider) {
+      //   $filterprovider.register('stringsFilter', filter);
+      // }));
+
+      // Our first test!!!!
+      it('$config uri is set', mocks.inject(function($config) {
+        // expect($config).not.toBeNull();
+        expect(Object.getOwnPropertyNames($config.uri).length).toBeGreaterThan(0);
+      }));
+
+      // it('should be true', function(){
+      //   expect(1).not.toBeNull();
+      // });
+
+    });
+  }
+);

http://git-wip-us.apache.org/repos/asf/incubator-griffin/blob/9b67bab1/ui/tests/ut/test-main.js
----------------------------------------------------------------------
diff --git a/ui/tests/ut/test-main.js b/ui/tests/ut/test-main.js
new file mode 100644
index 0000000..ef3c9bb
--- /dev/null
+++ b/ui/tests/ut/test-main.js
@@ -0,0 +1,97 @@
+/*
+	Copyright (c) 2016 eBay Software Foundation.
+	Licensed under the Apache License, Version 2.0 (the "License");
+	you may not use this file except in compliance with the License.
+	You may obtain a copy of the License at
+
+	    http://www.apache.org/licenses/LICENSE-2.0
+
+	Unless required by applicable law or agreed to in writing, software
+	distributed under the License is distributed on an "AS IS" BASIS,
+	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+	See the License for the specific language governing permissions and
+	limitations under the License.
+ */
+//for demo purpose
+var allTestFiles = [];
+var TEST_REGEXP = /(spec|test)\.js$/i;
+
+// Get a list of all the test files to include
+Object.keys(window.__karma__.files).forEach(function(file) {
+  if (TEST_REGEXP.test(file)) {
+    // Normalize paths to RequireJS module names.
+    // If you require sub-dependencies of test files to be loaded as-is (requiring file extension)
+    // then do not normalize the paths
+    var normalizedTestModule = file.replace(/^\/base\/|\.js$/g, '');
+    // var normalizedTestModule = file.replace(/^\/base\//, '').replace(/\.js$/, '');
+    // console.log(normalizedTestModule);
+    allTestFiles.push(normalizedTestModule);
+  }
+});
+
+require.config({
+  // Karma serves files under /base, which is the basePath from your config file
+  baseUrl: '/base',
+
+  waitSeconds: 200,
+  // dynamically load all test files
+  deps: allTestFiles,
+  // dpes: ['C:/temp/Bark_UI/tests/ut/specs/my_first_spec'],
+
+
+  // we have to kickoff jasmine, as it is asynchronous
+  callback: window.__karma__.start,
+  paths: {
+    // 'domReady': '../bower_components/domReady/domReady',
+    'angular': '/base/bower_components/angular/angular',
+    'angularMocks': '/base/node_modules/angular-mocks/angular-mocks',
+    'angularRoute': '/base/bower_components/angular-route/angular-route',
+
+    'ngAnimate': '/base/bower_components/angular-animate/angular-animate',
+    'ngToaster': '/base/bower_components/AngularJS-Toaster/toaster',
+
+    'jquery': '/base/bower_components/jquery/dist/jquery',
+    'bootstrap': '/base/bower_components/bootstrap/dist/js/bootstrap',
+
+    
+		'echarts': '/base/bower_components/echarts/dist/echarts',
+  },
+  shim: {
+    'angular': {
+      deps: ['jquery'],
+      exports: 'angular'
+    },
+    // 'angularMocks': {
+    //   exports: 'angularMocks',
+    //   deps: ['angular']
+    // },
+    'angularMocks': {deps: ['angular'], 'exports': 'angular.mock'},
+    'angularRoute': {
+        deps: ['angular'],
+        exports: 'angularRoute'
+    },
+    'ngSmartTable': {
+      deps: ['angular'],
+      exports: 'ngSmartTable'
+    },
+    'ngAnimate': {
+        deps: ['angular'],
+        exports: 'ngAnimate'
+    },
+    'ngToaster': {
+      deps: ['angular', 'ngAnimate'],
+      exports: 'ngToaster'
+    },
+
+    'jquery': {
+      exports: 'jquery'
+    },
+    'bootstrap': {
+      exports: 'bootstrap',
+      deps: ['jquery']
+    },
+    'echarts': {
+      exports: 'echarts'
+    }
+  }
+});