diff --git a/framework/test/warmup_test.py b/framework/test/warmup_test.py
index 8140fc7..13223f1 100644
--- a/framework/test/warmup_test.py
+++ b/framework/test/warmup_test.py
@@ -10,26 +10,39 @@
 
 import unittest
 
-from testing import testing_helpers
+import flask
 
-from framework import sql
 from framework import warmup
-from services import service_manager
 
 
 class WarmupTest(unittest.TestCase):
 
-  def setUp(self):
-    #self.cache_manager = cachemanager_svc.CacheManager()
-    #self.services = service_manager.Services(
-    #    cache_manager=self.cache_manager)
-    self.services = service_manager.Services()
-    self.servlet = warmup.Warmup('req', 'res', services=self.services)
+  def testHandleWarmup(self):
+    app = flask.Flask(__name__)
+    app.add_url_rule('/', view_func=warmup.Warmup)
 
+    with app.test_client() as client:
+      response = client.get('/')
 
-  def testHandleRequest_NothingToDo(self):
-    mr = testing_helpers.MakeMonorailRequest()
-    actual_json_data = self.servlet.HandleRequest(mr)
-    self.assertEqual(
-        {'success': 1},
-        actual_json_data)
+    self.assertEqual(response.status_code, 200)
+    self.assertEqual(response.data, '')
+
+  def testHandleStart(self):
+    app = flask.Flask(__name__)
+    app.add_url_rule('/', view_func=warmup.Start)
+
+    with app.test_client() as client:
+      response = client.get('/')
+
+    self.assertEqual(response.status_code, 200)
+    self.assertEqual(response.data, '')
+
+  def testHandleStop(self):
+    app = flask.Flask(__name__)
+    app.add_url_rule('/', view_func=warmup.Stop)
+
+    with app.test_client() as client:
+      response = client.get('/')
+
+    self.assertEqual(response.status_code, 200)
+    self.assertEqual(response.data, '')
