diff --git a/lib/data-handler.js b/lib/data-handler.js
index 13216b112ed9e5194e67851126801f858deca764..3ab3481f2fb24aee8c0b99a8ddde7eafd7253b4c 100644
--- a/lib/data-handler.js
+++ b/lib/data-handler.js
@@ -73,7 +73,7 @@ function _loadResource(targetPath) {
 
     // Find the result inside a static path index.
     if (!files[targetPath]) {
-        throw 'The requested resource is missing.';
+        throw new Error('The requested resource is missing.');
     }
 
     // Attempt to load resource contents.
diff --git a/test/test-data-handler.js b/test/test-data-handler.js
new file mode 100644
index 0000000000000000000000000000000000000000..b1ab320067d25bf48fca89e681b71161f239c294
--- /dev/null
+++ b/test/test-data-handler.js
@@ -0,0 +1,34 @@
+/**
+ * Imports
+ */
+
+var dataHandler = require("../lib/data-handler");
+
+/**
+ * Get Redirection URI Tests
+ */
+
+exports['test get redirection uri for existing file'] = function (assert) {
+    
+    var result = dataHandler.getRedirectionURI(
+        'resources/jquery/2.1.4/jquery.min.js.dec', 'UTF-8', 'application/javascript'
+    );
+
+    assert.ok(typeof result === 'object', 'Existing file was handled succesfully.');
+};
+
+exports['test get redirection uri for non-existing file'] = function (assert) {
+
+    assert.throws(function () {
+
+        dataHandler.getRedirectionURI('resources/non-existing/0.5.7/non-existing.js.dec',
+            'UTF-8', 'application/javascript');
+
+    }, Error, 'Non-existing file was handled succesfully.');
+};
+
+/**
+ * Run Tests
+ */
+
+require("sdk/test").run(exports);
diff --git a/test/test-request-analyzer.js b/test/test-request-analyzer.js
index 5e975830c010fd498178170eb31fca2704bdd71e..580751c961f9d22e5b61b32c63eb0617d4a54215 100644
--- a/test/test-request-analyzer.js
+++ b/test/test-request-analyzer.js
@@ -1,5 +1,13 @@
+/**
+ * Imports
+ */
+
 var requestAnalyzer = require("../lib/request-analyzer");
 
+/**
+ * Variables
+ */
+
 var localPaths = {
     angular: 'resources/angularjs/1.2.19/angular.min.js.dec',
     backbone: [
@@ -34,7 +42,50 @@ var localPaths = {
 };
 
 /**
- * Generic Tests
+ * Is Valid Candidate Tests
+ */
+
+exports['test get request to known cdn'] = function (assert) {
+    
+    var result = requestAnalyzer.isValidCandidate({
+        requestMethod: 'GET', URI: { host: 'ajax.googleapis.com' }
+    });
+
+    assert.ok(result, 'Valid candidate was successfully identified.');
+};
+
+exports['test post request to known cdn'] = function (assert) {
+    
+    var result = requestAnalyzer.isValidCandidate({
+        requestMethod: 'POST', URI: { host: 'ajax.googleapis.com' }
+    });
+
+    assert.equal(result, false, 'Invalid candidate was successfully identified.');
+};
+
+exports['test get request to unknown domain'] = function (assert) {
+    
+    var result = requestAnalyzer.isValidCandidate({
+        requestMethod: 'GET', URI: { host: 'ajax.example.com' }
+    });
+
+    assert.equal(result, false, 'Invalid candidate was successfully identified.');
+};
+
+exports['test get request from whitelisted domain'] = function (assert) {
+    
+    require('sdk/simple-prefs').prefs.domainWhitelist = 'example.com';
+
+    var result = requestAnalyzer.isValidCandidate({
+        requestMethod: 'GET', URI: { host: 'ajax.googleapis.com' },
+            referrer: { host: 'example.com' }, setRequestHeader: function () { return false; }
+    });
+
+    assert.equal(result, false, 'Whitelisted request was successfully ignored.');
+};
+
+/**
+ * Get Local Target Tests
  */
 
 exports['test regular resource'] = function (assert) {
@@ -77,9 +128,7 @@ exports['test webfont debug library'] = function (assert) {
     assert.equal(target.path, localPaths.webfont[0], 'Target was determined.');
 };
 
-/**
- * Google Hosted Libraries
- */
+// Google Hosted Libraries
 
 exports['test angular on google hosted libraries'] = function (assert) {
     var target = requestAnalyzer.getLocalTarget('ajax.googleapis.com', '/ajax/libs/angularjs/1.2.19/angular.min.js');
@@ -131,9 +180,7 @@ exports['test webfont on google hosted libraries'] = function (assert) {
     assert.equal(target.path, localPaths.webfont[1], 'Target was determined.');
 };
 
-/**
- * Microsoft Ajax CDN
- */
+// Microsoft Ajax CDN
 
 exports['test jquery on microsoft ajax cdn'] = function (assert) {
     var target = requestAnalyzer.getLocalTarget('ajax.aspnetcdn.com', '/ajax/jQuery/jquery-1.11.1.min.js');
@@ -155,9 +202,7 @@ exports['test modernizr on old microsoft ajax cdn'] = function (assert) {
     assert.equal(target.path, localPaths.modernizr, 'Target was determined.');
 };
 
-/**
- * CDNJS (Cloudflare)
- */
+// CDNJS (Cloudflare)
 
 exports['test angular on cdnjs'] = function (assert) {
     var target = requestAnalyzer.getLocalTarget('cdnjs.cloudflare.com', '/ajax/libs/angular.js/1.2.19/angular.min.js');
@@ -224,9 +269,7 @@ exports['test webfont on cdnjs'] = function (assert) {
     assert.equal(target.path, localPaths.webfont[1], 'Target was determined.');
 };
 
-/**
- * jQuery CDN (MaxCDN)
- */
+// jQuery CDN (MaxCDN)
 
 exports['test jquery on jquery cdn'] = function (assert) {
     var target = requestAnalyzer.getLocalTarget('code.jquery.com', '/jquery-1.11.1.min.js');
@@ -238,9 +281,7 @@ exports['test jquery-ui on jquery cdn'] = function (assert) {
     assert.equal(target.path, localPaths.jQueryUI, 'Target was determined.');
 };
 
-/**
- * jsDelivr (MaxCDN)
- */
+// jsDelivr (MaxCDN)
 
 exports['test angular on jsdelivr'] = function (assert) {
     var target = requestAnalyzer.getLocalTarget('cdn.jsdelivr.net', '/angularjs/1.2.19/angular.min.js');
@@ -292,9 +333,7 @@ exports['test webfont on jsdelivr'] = function (assert) {
     assert.equal(target.path, localPaths.webfont[1], 'Target was determined.');
 };
 
-/**
- * Yandex CDN
- */
+// Yandex CDN
 
 exports['test angular on yandex cdn'] = function (assert) {
     var target = requestAnalyzer.getLocalTarget('yandex.st', '/angularjs/1.2.19/angular.min.js');
@@ -351,9 +390,7 @@ exports['test underscore on yandex cdn'] = function (assert) {
     assert.equal(target.path, localPaths.underscore[2], 'Target was determined.');
 };
 
-/**
- * Baidu CDN
- */
+// Baidu CDN
 
 exports['test backbone on baidu cdn'] = function (assert) {
     var target = requestAnalyzer.getLocalTarget('libs.baidu.com', '/backbone/0.9.2/backbone-min.js');
@@ -410,9 +447,7 @@ exports['test webfont on baidu cdn'] = function (assert) {
     assert.equal(target.path, localPaths.webfont[0], 'Target was determined.');
 };
 
-/**
- * Sina Public Resources
- */
+// Sina Public Resources
 
 exports['test angular on sina public resources'] = function (assert) {
     var target = requestAnalyzer.getLocalTarget('lib.sinaapp.com', '/js/angular.js/angular-1.2.19/angular.min.js');
@@ -474,9 +509,7 @@ exports['test webfont on sina public resources'] = function (assert) {
     assert.equal(target.path, localPaths.webfont[0], 'Target was determined.');
 };
 
-/**
- * UpYun Library
- */
+// UpYun Library
 
 exports['test dojo on upyun library'] = function (assert) {
     var target = requestAnalyzer.getLocalTarget('upcdn.b0.upaiyun.com', '/libs/dojo/dojo-1.8.3.min.js');
@@ -508,4 +541,8 @@ exports['test mootools on upyun library'] = function (assert) {
     assert.equal(target.path, localPaths.mootools, 'Target was determined.');
 };
 
+/**
+ * Run Tests
+ */
+
 require("sdk/test").run(exports);