diff --git a/api/test/issues_servicer_test.py b/api/test/issues_servicer_test.py
index 0ba50ac..ab35a9f 100644
--- a/api/test/issues_servicer_test.py
+++ b/api/test/issues_servicer_test.py
@@ -1,7 +1,6 @@
-# Copyright 2018 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file or at
-# https://developers.google.com/open-source/licenses/bsd
+# Copyright 2018 The Chromium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
 
 """Tests for the issues servicer."""
 from __future__ import print_function
@@ -33,13 +32,12 @@
 from framework import monorailcontext
 from framework import permissions
 from search import frontendsearchpipeline
-from proto import tracker_pb2
-from proto import project_pb2
+from mrproto import tracker_pb2
+from mrproto import project_pb2
 from testing import fake
 from tracker import tracker_bizobj
 from services import service_manager
-from proto import tracker_pb2
-
+from mrproto import tracker_pb2
 
 class IssuesServicerTest(unittest.TestCase):
 
@@ -68,7 +66,7 @@
     self.issue_2 = fake.MakeTestIssue(
         789, 2, 'sum', 'New', 111, project_name='proj', issue_id=1002)
     self.issue_1.blocked_on_iids.append(self.issue_2.issue_id)
-    self.issue_1.blocked_on_ranks.append(sys.maxint)
+    self.issue_1.blocked_on_ranks.append(sys.maxsize)
     self.services.issue.TestAddIssue(self.issue_1)
     self.services.issue.TestAddIssue(self.issue_2)
     self.issues_svcr = issues_servicer.IssuesServicer(
@@ -161,8 +159,10 @@
 
     self.assertEqual('proj', response.project_name)
 
-  def testGetIssue_Normal(self):
+  @patch('businesslogic.work_env.WorkEnv.GetIssueMigratedID')
+  def testGetIssue_Normal(self, mockGetIssueMigratedID):
     """We can get an issue."""
+    mockGetIssueMigratedID.return_value = None
     request = issues_pb2.GetIssueRequest()
     request.issue_ref.project_name = 'proj'
     request.issue_ref.local_id = 1
@@ -179,6 +179,27 @@
     self.assertEqual('proj', actual.blocked_on_issue_refs[0].project_name)
     self.assertEqual(2, actual.blocked_on_issue_refs[0].local_id)
 
+  @patch('businesslogic.work_env.WorkEnv.GetIssueMigratedID')
+  def testGetIssue_WithMigratedID(self, mockGetIssueMigratedID):
+    """We can get an issue."""
+    mockGetIssueMigratedID.return_value = '123'
+    request = issues_pb2.GetIssueRequest()
+    request.issue_ref.project_name = 'proj'
+    request.issue_ref.local_id = 1
+    mc = monorailcontext.MonorailContext(
+        self.services, cnxn=self.cnxn, requester='owner@example.com')
+    mc.LookupLoggedInUserPerms(self.project)
+
+    response = self.CallWrapped(self.issues_svcr.GetIssue, mc, request)
+
+    actual = response.issue
+    self.assertEqual('proj', actual.project_name)
+    self.assertEqual(1, actual.local_id)
+    self.assertEqual(1, len(actual.blocked_on_issue_refs))
+    self.assertEqual('proj', actual.blocked_on_issue_refs[0].project_name)
+    self.assertEqual(2, actual.blocked_on_issue_refs[0].local_id)
+    self.assertEqual('123', actual.migrated_id)
+
   def testGetIssue_Moved(self):
     """We can get a moved issue."""
     self.services.project.TestAddProject(
@@ -560,10 +581,11 @@
     request.issue_ref.project_name = 'proj'
     request.issue_ref.local_id = 1
     request.comment_content = 'test comment'
-    request.uploads.extend([
-          issue_objects_pb2.AttachmentUpload(
-              filename='a.txt',
-              content='aaaaa')])
+    request.uploads.extend(
+        [
+            issue_objects_pb2.AttachmentUpload(
+                filename='a.txt', content=b'aaaaa')
+        ])
     mc = monorailcontext.MonorailContext(
         self.services, cnxn=self.cnxn, requester='owner@example.com')
     mc.LookupLoggedInUserPerms(self.project)
@@ -1176,10 +1198,11 @@
     )
     request.issue_ref.project_name = 'proj'
     request.issue_ref.local_id = 1
-    request.uploads.extend([
-          issue_objects_pb2.AttachmentUpload(
-              filename='a.txt',
-              content='aaaaa')])
+    request.uploads.extend(
+        [
+            issue_objects_pb2.AttachmentUpload(
+                filename='a.txt', content=b'aaaaa')
+        ])
     request.kept_attachments.extend([1, 2, 3])
     request.send_email = True
 
@@ -1222,7 +1245,7 @@
     work_env.WorkEnv(mc, self.services).UpdateIssueApproval.\
     assert_called_once_with(
         self.issue_1.issue_id, 3, ANY, u'Well, actually', False,
-        attachments=[(u'a.txt', 'aaaaa', 'text/plain')], send_email=True,
+        attachments=[(u'a.txt', b'aaaaa', 'text/plain')], send_email=True,
         kept_attachments=[1, 2, 3])
     self.assertEqual(expected, actual)
 
@@ -1511,10 +1534,10 @@
     response = self.CallWrapped(self.issues_svcr.IssueSnapshot, mc, request)
 
     self.assertEqual(2, len(response.snapshot_count))
-    self.assertEqual('Opened', response.snapshot_count[0].dimension)
-    self.assertEqual(100, response.snapshot_count[0].count)
-    self.assertEqual('Closed', response.snapshot_count[1].dimension)
-    self.assertEqual(23, response.snapshot_count[1].count)
+    self.assertEqual('Closed', response.snapshot_count[0].dimension)
+    self.assertEqual(23, response.snapshot_count[0].count)
+    self.assertEqual('Opened', response.snapshot_count[1].dimension)
+    self.assertEqual(100, response.snapshot_count[1].count)
     mockSnapshotCountsQuery.assert_called_once_with(self.project, 1531334109,
         'open', label_prefix='', query=None, canned_query=None, hotlist=None)
 
@@ -1531,10 +1554,10 @@
     response = self.CallWrapped(self.issues_svcr.IssueSnapshot, mc, request)
 
     self.assertEqual(2, len(response.snapshot_count))
-    self.assertEqual('Fixed', response.snapshot_count[0].dimension)
-    self.assertEqual(23, response.snapshot_count[0].count)
-    self.assertEqual('Accepted', response.snapshot_count[1].dimension)
-    self.assertEqual(100, response.snapshot_count[1].count)
+    self.assertEqual('Accepted', response.snapshot_count[0].dimension)
+    self.assertEqual(100, response.snapshot_count[0].count)
+    self.assertEqual('Fixed', response.snapshot_count[1].dimension)
+    self.assertEqual(23, response.snapshot_count[1].count)
     mockSnapshotCountsQuery.assert_called_once_with(self.project, 1531334109,
         'status', label_prefix='', query=None, canned_query=None, hotlist=None)
 
