{"action":"created","comment":{"url":"https://api.github.com/repos/autotest/tp-qemu/pulls/comments/93607692","pull_request_review_id":14138490,"id":93607692,"diff_hunk":"@@ -0,0 +1,234 @@\n+import logging\n+import random\n+\n+from avocado.core import exceptions\n+\n+from virttest import error_context\n+from virttest import utils_misc\n+from qemu.tests.balloon_check import BallooningTest\n+\n+\n+class BallooningTestPause(BallooningTest):\n+\n+    \"\"\"\n+    Basic functions of memory ballooning test for guest booted\n+    in paused status\n+    \"\"\"\n+\n+    def __init__(self, test, params, env):\n+        super(BallooningTest, self).__init__(test, params, env)\n+\n+        self.vm = env.get_vm(params[\"main_vm\"])\n+        self.ori_mem = self.get_vm_mem(self.vm)\n+        if self.get_ballooned_memory() != self.ori_mem:\n+            self.balloon_memory(self.ori_mem)\n+        self.old_mmem = self.ori_mem\n+        self.old_gmem = None\n+\n+    @error_context.context_aware\n+    def memory_check(self, step, changed_mem):\n+        \"\"\"\n+        Check memory change status in monitor and return memory both\n+        in guest and monitor\n+        :param step: the check point string\n+        :type step: string\n+        :param changed_mem: ballooned memory in current step(compared with\n+        last round of memory, i.e. self.old_mmem, instead of self.ori_mem)\n+        :type changed_mem: int\n+        :return: memory size get from monitor and guest\n+        :rtype: tuple\n+        \"\"\"\n+        error_context.context(\"Check memory status %s\" % step, logging.info)\n+        mmem = self.get_ballooned_memory()\n+        gmem = self.get_memory_status()\n+        if (abs(mmem - self.old_mmem)) != changed_mem or (\n+                    self.old_gmem and (\n+                            abs(gmem - self.old_gmem) - changed_mem) > 100):\n+            self.error_report(step, abs(self.old_mmem - changed_mem),\n+                              mmem, gmem)\n+            raise exceptions.TestFail(\"Balloon test failed %s\" % step)\n+        return (mmem, gmem)\n+\n+    @error_context.context_aware\n+    def balloon_memory(self, new_mem):\n+        \"\"\"\n+        Baloon guest memory to new_mem\n+\n+        :param new_mem: New desired memory.\n+        :type new_mem: int\n+        \"\"\"\n+        error_context.context(\"Change VM memory to %s\" % new_mem, logging.info)\n+        try:\n+            self.vm.balloon(new_mem)\n+        except Exception, e:\n+            if self.vm.monitor.verify_status('paused'):\n+                # Make sure memory not changed before the guest resumed\n+                if self.get_ballooned_memory() != self.ori_mem:\n+                    raise exceptions.TestFail(\"Memory changed before guest \"\n+                                              \"resumed\")\n+                logging.info(\"Resume the guest\")\n+                self.vm.resume()\n+            elif new_mem == self.get_ballooned_memory():\n+                pass\n+            else:\n+                raise exceptions.TestFail(\"Balloon memory fail with error\"\n+                                          \" message: %s\" % e)\n+        compare_mem = new_mem\n+        balloon_timeout = float(self.params.get(\"balloon_timeout\", 100))\n+        status = utils_misc.wait_for((lambda: compare_mem ==\n+                                      self.get_ballooned_memory()),\n+                                     balloon_timeout)\n+        if status is None:\n+            raise exceptions.TestFail(\"Failed to balloon memory to expect\"\n+                                      \" value during %ss\" % balloon_timeout)\n+\n+    def get_memory_boundary(self):\n+        \"\"\"\n+        Get the legal memory boundary for the balloon test\n+\n+        :return: min and max size of the memory\n+        :rtype: tuple\n+        \"\"\"\n+        if self.ori_mem <= (1 * 1024 * 1024):\n+            ratio = float(self.params.get(\"ratio_1\", 0.8))\n+        else:\n+            ratio = float(self.params.get(\"ratio_2\", 0.5))\n+        min_size = int(ratio * self.ori_mem)\n+        max_size = self.ori_mem\n+        return min_size, max_size\n+\n+    def error_report(self, step, expect_value, monitor_value, guest_value):\n+        \"\"\"\n+        Generate the error report\n+\n+        :param step: the step of the error happen\n+        :param expect_value: memory size assign to the vm\n+        :param monitor_value: memory size report from monitor\n+        :param guest_value: memory size report from guest\n+        \"\"\"\n+        logging.error(\"Memory size mismatch %s:\\n\" % step)\n+        error_msg = \"Wanted to be changed: %s\\n\" % abs(self.old_mmem -\n+                                                       expect_value)\n+        error_msg += \"Changed in monitor: %s\\n\" % abs(self.old_mmem -\n+                                                      monitor_value)\n+        if self.old_gmem:\n+            error_msg += \"Changed in guest: %s\\n\" % abs(\n+                self.old_gmem - guest_value)\n+        logging.error(error_msg)\n+\n+\n+class BallooningTestPauseWin(BallooningTestPause):\n+    \"\"\"\n+    Windows memory ballooning test for guest booted in paused status\n+    \"\"\"\n+\n+    def get_memory_status(self):\n+        \"\"\"\n+        Get Memory status inside guest\n+\n+        :return: the used memory size inside guest.\n+        :rtype: int\n+        \"\"\"\n+        return int(self.get_used_mem())\n+\n+\n+class BallooningTestPauseLinux(BallooningTestPause):\n+\n+    \"\"\"\n+    Linux memory ballooning test for guest booted in paused status\n+    \"\"\"\n+\n+    def get_memory_status(self):\n+        \"\"\"\n+        Get Memory status inside guest\n+\n+        :return: the total memory size inside guest.\n+        :rtype: int\n+        \"\"\"\n+        return int(self.get_total_mem())\n+\n+\n+@error_context.context_aware\n+def run(test, params, env):\n+    \"\"\"\n+    Balloon guest memory when guest started in paused status,\n+    use M when compare memory in this script:\n+    1) Boot a guest with balloon enabled and in paused status,\n+    i.e. '-S' used but not cont\n+    2) Evict guest memory in paused status, cont the guest;\n+    check memory in monitor\n+    3) To check if the guest memory balloon working well after above test,\n+    continue to do:\n+    3.1) Enlarge guest memory in running status;\n+    check memory both in guest and monitor\n+    3.2) Evict guest memory in running status;\n+    check memory both in guest and monitor\n+    4) Run subtest if necessary\n+    5) Reset memory back to the original value\n+\n+    :param test: QEMU test object\n+    :param params: Dictionary with the test parameters\n+    :param env: Dictionary with test environment.\n+    \"\"\"\n+    def _memory_check_after_sub_test():\n+        \"\"\"\n+        Check memory status after subtest, the changed_mem is 0\n+        \"\"\"\n+        try:\n+            output = balloon_test.memory_check(\"after subtest\", 0)\n+        except exceptions.TestFail:\n+            return None\n+        return output\n+\n+    if params['os_type'] == 'windows':\n+        balloon_test = BallooningTestPauseWin(test, params, env)\n+    else:\n+        balloon_test = BallooningTestPauseLinux(test, params, env)\n+\n+    min_sz, max_sz = balloon_test.get_memory_boundary()\n+\n+    for tag in params.objects('test_tags'):\n+        vm = env.get_vm(params[\"main_vm\"])\n+        if vm.monitor.verify_status('paused'):\n+            error_context.context(\"Running balloon %s test when\"\n+                                  \" the guest in paused status\" % tag,\n+                                  logging.info)\n+        else:\n+            error_context.context(\"Running balloon %s test after\"\n+                                  \" the guest turned to running status\" % tag,\n+                                  logging.info)\n+        params_tag = params.object_params(tag)\n+        balloon_type = params_tag['balloon_type']\n+        if balloon_type == 'evict':\n+            expect_mem = int(random.uniform(min_sz, balloon_test.old_mmem))\n+        else:\n+            expect_mem = int(random.uniform(balloon_test.old_mmem, max_sz))\n+\n+        balloon_test.balloon_memory(expect_mem)\n+        changed_memory = abs(balloon_test.old_mmem - expect_mem)\n+        mmem, gmem = balloon_test.memory_check(\"after %s memory\" % tag,\n+                                               changed_memory)\n+        balloon_test.old_mmem = mmem\n+        balloon_test.old_gmem = gmem\n+\n+    subtest = params.get(\"sub_test_after_balloon\")\n+    if subtest:\n+        error_context.context(\"Running subtest after guest balloon test\",\n+                              logging.info)\n+        should_quit = balloon_test.run_balloon_sub_test(test, params,\n+                                                        env, subtest)\n+        if should_quit == 1:\n+            return\n+\n+        sleep_before_check = int(params.get(\"sleep_before_check\", 0))\n+        timeout = int(params.get(\"balloon_timeout\", 100)) + sleep_before_check\n+        msg = \"Wait memory balloon back after %s \" % subtest\n+        output = utils_misc.wait_for(_memory_check_after_sub_test, timeout,\n+                                     sleep_before_check, 5, msg)\n+        if output is None:","path":"qemu/tests/balloon_boot_in_pause.py","position":227,"original_position":228,"commit_id":"b2d81c1e4d499572e5862661c054617a51fd53f2","original_commit_id":"1092ab1cf444932a36720e1e5b931a38311852f7","user":{"login":"ngu-niny","id":9105161,"avatar_url":"https://avatars.githubusercontent.com/u/9105161?v=3","gravatar_id":"","url":"https://api.github.com/users/ngu-niny","html_url":"https://github.com/ngu-niny","followers_url":"https://api.github.com/users/ngu-niny/followers","following_url":"https://api.github.com/users/ngu-niny/following{/other_user}","gists_url":"https://api.github.com/users/ngu-niny/gists{/gist_id}","starred_url":"https://api.github.com/users/ngu-niny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ngu-niny/subscriptions","organizations_url":"https://api.github.com/users/ngu-niny/orgs","repos_url":"https://api.github.com/users/ngu-niny/repos","events_url":"https://api.github.com/users/ngu-niny/events{/privacy}","received_events_url":"https://api.github.com/users/ngu-niny/received_events","type":"User","site_admin":false},"body":"@CongLi Updated, thanks.","created_at":"2016-12-22T11:28:13Z","updated_at":"2016-12-22T11:28:13Z","html_url":"https://github.com/autotest/tp-qemu/pull/840#discussion_r93607692","pull_request_url":"https://api.github.com/repos/autotest/tp-qemu/pulls/840","_links":{"self":{"href":"https://api.github.com/repos/autotest/tp-qemu/pulls/comments/93607692"},"html":{"href":"https://github.com/autotest/tp-qemu/pull/840#discussion_r93607692"},"pull_request":{"href":"https://api.github.com/repos/autotest/tp-qemu/pulls/840"}}},"pull_request":{"url":"https://api.github.com/repos/autotest/tp-qemu/pulls/840","id":95375753,"html_url":"https://github.com/autotest/tp-qemu/pull/840","diff_url":"https://github.com/autotest/tp-qemu/pull/840.diff","patch_url":"https://github.com/autotest/tp-qemu/pull/840.patch","issue_url":"https://api.github.com/repos/autotest/tp-qemu/issues/840","number":840,"state":"open","locked":false,"title":"Add code to balloon guest memory when guest start with paused status","user":{"login":"ngu-niny","id":9105161,"avatar_url":"https://avatars.githubusercontent.com/u/9105161?v=3","gravatar_id":"","url":"https://api.github.com/users/ngu-niny","html_url":"https://github.com/ngu-niny","followers_url":"https://api.github.com/users/ngu-niny/followers","following_url":"https://api.github.com/users/ngu-niny/following{/other_user}","gists_url":"https://api.github.com/users/ngu-niny/gists{/gist_id}","starred_url":"https://api.github.com/users/ngu-niny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ngu-niny/subscriptions","organizations_url":"https://api.github.com/users/ngu-niny/orgs","repos_url":"https://api.github.com/users/ngu-niny/repos","events_url":"https://api.github.com/users/ngu-niny/events{/privacy}","received_events_url":"https://api.github.com/users/ngu-niny/received_events","type":"User","site_admin":false},"body":"Add case balloon_boot_in_pause with corresponding code to make ballooning memory when guest start with pause status come true\r\n\r\nID: 1373058\r\n\r\nSigned-off-by: Nini Gu <ngu@redhat.com>","created_at":"2016-11-26T16:24:57Z","updated_at":"2016-12-22T11:28:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b068738567ad8cb3c7b4bd52ee188309a4833ac7","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/autotest/tp-qemu/pulls/840/commits","review_comments_url":"https://api.github.com/repos/autotest/tp-qemu/pulls/840/comments","review_comment_url":"https://api.github.com/repos/autotest/tp-qemu/pulls/comments{/number}","comments_url":"https://api.github.com/repos/autotest/tp-qemu/issues/840/comments","statuses_url":"https://api.github.com/repos/autotest/tp-qemu/statuses/b2d81c1e4d499572e5862661c054617a51fd53f2","head":{"label":"ngu-niny:test4","ref":"test4","sha":"b2d81c1e4d499572e5862661c054617a51fd53f2","user":{"login":"ngu-niny","id":9105161,"avatar_url":"https://avatars.githubusercontent.com/u/9105161?v=3","gravatar_id":"","url":"https://api.github.com/users/ngu-niny","html_url":"https://github.com/ngu-niny","followers_url":"https://api.github.com/users/ngu-niny/followers","following_url":"https://api.github.com/users/ngu-niny/following{/other_user}","gists_url":"https://api.github.com/users/ngu-niny/gists{/gist_id}","starred_url":"https://api.github.com/users/ngu-niny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ngu-niny/subscriptions","organizations_url":"https://api.github.com/users/ngu-niny/orgs","repos_url":"https://api.github.com/users/ngu-niny/repos","events_url":"https://api.github.com/users/ngu-niny/events{/privacy}","received_events_url":"https://api.github.com/users/ngu-niny/received_events","type":"User","site_admin":false},"repo":{"id":56311418,"name":"tp-qemu","full_name":"ngu-niny/tp-qemu","owner":{"login":"ngu-niny","id":9105161,"avatar_url":"https://avatars.githubusercontent.com/u/9105161?v=3","gravatar_id":"","url":"https://api.github.com/users/ngu-niny","html_url":"https://github.com/ngu-niny","followers_url":"https://api.github.com/users/ngu-niny/followers","following_url":"https://api.github.com/users/ngu-niny/following{/other_user}","gists_url":"https://api.github.com/users/ngu-niny/gists{/gist_id}","starred_url":"https://api.github.com/users/ngu-niny/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ngu-niny/subscriptions","organizations_url":"https://api.github.com/users/ngu-niny/orgs","repos_url":"https://api.github.com/users/ngu-niny/repos","events_url":"https://api.github.com/users/ngu-niny/events{/privacy}","received_events_url":"https://api.github.com/users/ngu-niny/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ngu-niny/tp-qemu","description":"Virt Test Provider for qemu and other related virtualization backends","fork":true,"url":"https://api.github.com/repos/ngu-niny/tp-qemu","forks_url":"https://api.github.com/repos/ngu-niny/tp-qemu/forks","keys_url":"https://api.github.com/repos/ngu-niny/tp-qemu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ngu-niny/tp-qemu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ngu-niny/tp-qemu/teams","hooks_url":"https://api.github.com/repos/ngu-niny/tp-qemu/hooks","issue_events_url":"https://api.github.com/repos/ngu-niny/tp-qemu/issues/events{/number}","events_url":"https://api.github.com/repos/ngu-niny/tp-qemu/events","assignees_url":"https://api.github.com/repos/ngu-niny/tp-qemu/assignees{/user}","branches_url":"https://api.github.com/repos/ngu-niny/tp-qemu/branches{/branch}","tags_url":"https://api.github.com/repos/ngu-niny/tp-qemu/tags","blobs_url":"https://api.github.com/repos/ngu-niny/tp-qemu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ngu-niny/tp-qemu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ngu-niny/tp-qemu/git/refs{/sha}","trees_url":"https://api.github.com/repos/ngu-niny/tp-qemu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ngu-niny/tp-qemu/statuses/{sha}","languages_url":"https://api.github.com/repos/ngu-niny/tp-qemu/languages","stargazers_url":"https://api.github.com/repos/ngu-niny/tp-qemu/stargazers","contributors_url":"https://api.github.com/repos/ngu-niny/tp-qemu/contributors","subscribers_url":"https://api.github.com/repos/ngu-niny/tp-qemu/subscribers","subscription_url":"https://api.github.com/repos/ngu-niny/tp-qemu/subscription","commits_url":"https://api.github.com/repos/ngu-niny/tp-qemu/commits{/sha}","git_commits_url":"https://api.github.com/repos/ngu-niny/tp-qemu/git/commits{/sha}","comments_url":"https://api.github.com/repos/ngu-niny/tp-qemu/comments{/number}","issue_comment_url":"https://api.github.com/repos/ngu-niny/tp-qemu/issues/comments{/number}","contents_url":"https://api.github.com/repos/ngu-niny/tp-qemu/contents/{+path}","compare_url":"https://api.github.com/repos/ngu-niny/tp-qemu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ngu-niny/tp-qemu/merges","archive_url":"https://api.github.com/repos/ngu-niny/tp-qemu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ngu-niny/tp-qemu/downloads","issues_url":"https://api.github.com/repos/ngu-niny/tp-qemu/issues{/number}","pulls_url":"https://api.github.com/repos/ngu-niny/tp-qemu/pulls{/number}","milestones_url":"https://api.github.com/repos/ngu-niny/tp-qemu/milestones{/number}","notifications_url":"https://api.github.com/repos/ngu-niny/tp-qemu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ngu-niny/tp-qemu/labels{/name}","releases_url":"https://api.github.com/repos/ngu-niny/tp-qemu/releases{/id}","deployments_url":"https://api.github.com/repos/ngu-niny/tp-qemu/deployments","created_at":"2016-04-15T10:16:41Z","updated_at":"2016-04-15T10:16:44Z","pushed_at":"2016-12-22T11:24:55Z","git_url":"git://github.com/ngu-niny/tp-qemu.git","ssh_url":"git@github.com:ngu-niny/tp-qemu.git","clone_url":"https://github.com/ngu-niny/tp-qemu.git","svn_url":"https://github.com/ngu-niny/tp-qemu","homepage":null,"size":11770,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"autotest:master","ref":"master","sha":"b423616e463acf03da755f91d73022dca04fde6c","user":{"login":"autotest","id":472856,"avatar_url":"https://avatars.githubusercontent.com/u/472856?v=3","gravatar_id":"","url":"https://api.github.com/users/autotest","html_url":"https://github.com/autotest","followers_url":"https://api.github.com/users/autotest/followers","following_url":"https://api.github.com/users/autotest/following{/other_user}","gists_url":"https://api.github.com/users/autotest/gists{/gist_id}","starred_url":"https://api.github.com/users/autotest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/autotest/subscriptions","organizations_url":"https://api.github.com/users/autotest/orgs","repos_url":"https://api.github.com/users/autotest/repos","events_url":"https://api.github.com/users/autotest/events{/privacy}","received_events_url":"https://api.github.com/users/autotest/received_events","type":"Organization","site_admin":false},"repo":{"id":16180304,"name":"tp-qemu","full_name":"autotest/tp-qemu","owner":{"login":"autotest","id":472856,"avatar_url":"https://avatars.githubusercontent.com/u/472856?v=3","gravatar_id":"","url":"https://api.github.com/users/autotest","html_url":"https://github.com/autotest","followers_url":"https://api.github.com/users/autotest/followers","following_url":"https://api.github.com/users/autotest/following{/other_user}","gists_url":"https://api.github.com/users/autotest/gists{/gist_id}","starred_url":"https://api.github.com/users/autotest/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/autotest/subscriptions","organizations_url":"https://api.github.com/users/autotest/orgs","repos_url":"https://api.github.com/users/autotest/repos","events_url":"https://api.github.com/users/autotest/events{/privacy}","received_events_url":"https://api.github.com/users/autotest/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/autotest/tp-qemu","description":"Virt Test Provider for qemu and other related virtualization backends","fork":false,"url":"https://api.github.com/repos/autotest/tp-qemu","forks_url":"https://api.github.com/repos/autotest/tp-qemu/forks","keys_url":"https://api.github.com/repos/autotest/tp-qemu/keys{/key_id}","collaborators_url":"https://api.github.com/repos/autotest/tp-qemu/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/autotest/tp-qemu/teams","hooks_url":"https://api.github.com/repos/autotest/tp-qemu/hooks","issue_events_url":"https://api.github.com/repos/autotest/tp-qemu/issues/events{/number}","events_url":"https://api.github.com/repos/autotest/tp-qemu/events","assignees_url":"https://api.github.com/repos/autotest/tp-qemu/assignees{/user}","branches_url":"https://api.github.com/repos/autotest/tp-qemu/branches{/branch}","tags_url":"https://api.github.com/repos/autotest/tp-qemu/tags","blobs_url":"https://api.github.com/repos/autotest/tp-qemu/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/autotest/tp-qemu/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/autotest/tp-qemu/git/refs{/sha}","trees_url":"https://api.github.com/repos/autotest/tp-qemu/git/trees{/sha}","statuses_url":"https://api.github.com/repos/autotest/tp-qemu/statuses/{sha}","languages_url":"https://api.github.com/repos/autotest/tp-qemu/languages","stargazers_url":"https://api.github.com/repos/autotest/tp-qemu/stargazers","contributors_url":"https://api.github.com/repos/autotest/tp-qemu/contributors","subscribers_url":"https://api.github.com/repos/autotest/tp-qemu/subscribers","subscription_url":"https://api.github.com/repos/autotest/tp-qemu/subscription","commits_url":"https://api.github.com/repos/autotest/tp-qemu/commits{/sha}","git_commits_url":"https://api.github.com/repos/autotest/tp-qemu/git/commits{/sha}","comments_url":"https://api.github.com/repos/autotest/tp-qemu/comments{/number}","issue_comment_url":"https://api.github.com/repos/autotest/tp-qemu/issues/comments{/number}","contents_url":"https://api.github.com/repos/autotest/tp-qemu/contents/{+path}","compare_url":"https://api.github.com/repos/autotest/tp-qemu/compare/{base}...{head}","merges_url":"https://api.github.com/repos/autotest/tp-qemu/merges","archive_url":"https://api.github.com/repos/autotest/tp-qemu/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/autotest/tp-qemu/downloads","issues_url":"https://api.github.com/repos/autotest/tp-qemu/issues{/number}","pulls_url":"https://api.github.com/repos/autotest/tp-qemu/pulls{/number}","milestones_url":"https://api.github.com/repos/autotest/tp-qemu/milestones{/number}","notifications_url":"https://api.github.com/repos/autotest/tp-qemu/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/autotest/tp-qemu/labels{/name}","releases_url":"https://api.github.com/repos/autotest/tp-qemu/releases{/id}","deployments_url":"https://api.github.com/repos/autotest/tp-qemu/deployments","created_at":"2014-01-23T17:51:34Z","updated_at":"2016-11-21T12:05:07Z","pushed_at":"2016-12-22T11:24:57Z","git_url":"git://github.com/autotest/tp-qemu.git","ssh_url":"git@github.com:autotest/tp-qemu.git","clone_url":"https://github.com/autotest/tp-qemu.git","svn_url":"https://github.com/autotest/tp-qemu","homepage":null,"size":11806,"stargazers_count":15,"watchers_count":15,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":79,"mirror_url":null,"open_issues_count":33,"forks":79,"open_issues":33,"watchers":15,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/autotest/tp-qemu/pulls/840"},"html":{"href":"https://github.com/autotest/tp-qemu/pull/840"},"issue":{"href":"https://api.github.com/repos/autotest/tp-qemu/issues/840"},"comments":{"href":"https://api.github.com/repos/autotest/tp-qemu/issues/840/comments"},"review_comments":{"href":"https://api.github.com/repos/autotest/tp-qemu/pulls/840/comments"},"review_comment":{"href":"https://api.github.com/repos/autotest/tp-qemu/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/autotest/tp-qemu/pulls/840/commits"},"statuses":{"href":"https://api.github.com/repos/autotest/tp-qemu/statuses/b2d81c1e4d499572e5862661c054617a51fd53f2"}}}}
{"actor":{"display_login":"ngu-niny"}}