{"action":"created","comment":{"url":"https://api.github.com/repos/Venkat2811/liota/pulls/comments/110160737","pull_request_review_id":31310694,"id":110160737,"diff_hunk":"@@ -0,0 +1,420 @@\n+# -*- coding: utf-8 -*-\n+# ----------------------------------------------------------------------------#\n+#  Copyright © 2015-2016 VMware, Inc. All Rights Reserved.                    #\n+#                                                                             #\n+#  Licensed under the BSD 2-Clause License (the “License”); you may not use   #\n+#  this file except in compliance with the License.                           #\n+#                                                                             #\n+#  The BSD 2-Clause License                                                   #\n+#                                                                             #\n+#  Redistribution and use in source and binary forms, with or without         #\n+#  modification, are permitted provided that the following conditions are met:#\n+#                                                                             #\n+#  - Redistributions of source code must retain the above copyright notice,   #\n+#      this list of conditions and the following disclaimer.                  #\n+#                                                                             #\n+#  - Redistributions in binary form must reproduce the above copyright        #\n+#      notice, this list of conditions and the following disclaimer in the    #\n+#      documentation and/or other materials provided with the distribution.   #\n+#                                                                             #\n+#  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"#\n+#  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  #\n+#  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE #\n+#  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE  #\n+#  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR        #\n+#  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF       #\n+#  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS   #\n+#  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN    #\n+#  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)    #\n+#  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF     #\n+#  THE POSSIBILITY OF SUCH DAMAGE.                                            #\n+# ----------------------------------------------------------------------------#\n+\n+import Queue\n+import logging\n+import os\n+import unittest\n+from ConfigParser import ConfigParser\n+\n+import mock\n+import paho.mqtt.client as paho\n+\n+from liota.dcc_comms.mqtt_dcc_comms import MqttDccComms\n+from liota.entities.edge_systems.dell5k_edge_system import Dell5KEdgeSystem\n+from liota.lib.transports.mqtt import Mqtt, MqttMessagingAttributes, QoSDetails\n+from liota.lib.utilities.identity import Identity\n+from liota.lib.utilities.tls_conf import TLSConf\n+from liota.lib.utilities.utility import read_liota_config\n+from liota.lib.utilities.utility import systemUUID\n+\n+log = logging.getLogger(__name__)\n+\n+\n+# Callback function for subscribe and publish\n+def callback_function(*args, **kwargs):\n+    pass\n+\n+\n+class MqttDccCommsTest(unittest.TestCase):\n+    \"\"\"\n+    Unit test cases for MQTT DccComms\n+    \"\"\"\n+\n+    @mock.patch.object(Mqtt, 'connect_soc')\n+    def setUp(self, mock_connect):\n+        \"\"\"\n+        Setup all required parameters for MQTT DCC communication tests\n+        :param mock_connect: Mocked MQTT connect method\n+        :return: None\n+        \"\"\"\n+        # ConfigParser to parse ini file\n+        self.config = ConfigParser()\n+        self.uuid_file = read_liota_config('UUID_PATH', 'uuid_path')\n+\n+        # Broker details\n+        self.url = \"Broker-IP\"\n+        self.port = \"Broker-Port\"\n+        self.mqtt_username = \"test\"\n+        self.mqtt_password = \"test\"\n+        self.enable_authentication = True\n+        self.clean_session = True\n+        self.protocol = \"MQTTv311\"\n+        self.transport = \"tcp\"\n+        self.connection_disconnect_timeout = 2\n+        self.client_id = \"test-client\"\n+\n+        # Message QoS and connection details\n+        self.QoSlevel = 2\n+        self.inflight = 20\n+        self.queue_size = 0\n+        self.retry = 5\n+        self.keep_alive = 60\n+\n+        # EdgeSystem name\n+        self.edge_system = Dell5KEdgeSystem(\"TestGateway\")\n+\n+        # TLS configurations\n+        self.root_ca_cert = \"/etc/liota/mqtt/conf/ca.crt\"\n+        self.client_cert_file = \"/etc/liota/mqtt/conf/client.crt\"\n+        self.client_key_file = \"/etc/liota/mqtt/conf/client.key\"\n+        self.cert_required = \"CERT_REQUIRED\"\n+        self.tls_version = \"PROTOCOL_TLSv1\"\n+        self.cipher = None\n+\n+        # Encapsulate the authentication details\n+        self.identity = Identity(self.root_ca_cert, self.mqtt_username, self.mqtt_password,\n+                                 self.client_cert_file, self.client_key_file)\n+\n+        # Encapsulate TLS parameters\n+        self.tls_conf = TLSConf(self.cert_required, self.tls_version, self.cipher)\n+\n+        # Encapsulate QoS related parameters\n+        self.qos_details = QoSDetails(self.inflight, self.queue_size, self.retry)\n+\n+        self.publish_message = \"test-message\"\n+\n+        # Creating messaging attributes\n+        self.mqtt_msg_attr = MqttMessagingAttributes(pub_topic=\"publish-topic\", sub_topic=\"subscribe-topic\",\n+                                                     pub_retain=False, sub_callback=callback_function)\n+\n+        # Instantiate client for DCC communication\n+        self.client = MqttDccComms(edge_system_name=self.edge_system.name,\n+                                   url=self.url, port=self.port, clean_session=self.clean_session,\n+                                   mqtt_msg_attr=self.mqtt_msg_attr)\n+\n+    def tearDown(self):\n+        \"\"\"\n+        Clean up all parameters used in test cases\n+        :return: None\n+        \"\"\"\n+        try:\n+            os.remove(self.uuid_file)\n+        except OSError as e:\n+            log.error(\"Unable to remove UUID file\" + str(e))\n+\n+        self.config = None\n+        self.uuid_file = None\n+        self.edge_system = None\n+        self.url = None\n+        self.port = None\n+        self.mqtt_username = None\n+        self.mqtt_password = None\n+        self.enable_authentication = None\n+        self.clean_session = None\n+        self.protocol = None\n+        self.transport = None\n+        self.connection_disconnect_timeout = None\n+        self.client_id = None\n+\n+        # Message QoS and connection details\n+        self.QoSlevel = None\n+        self.inflight = None\n+        self.queue_size = None\n+        self.retry = None\n+        self.keep_alive = None\n+\n+        # EdgeSystem name\n+        self.edge_system = None\n+\n+        # TLS configurations\n+        self.root_ca_cert = None\n+        self.client_cert_file = None\n+        self.client_key_file = None\n+        self.cert_required = None\n+        self.tls_version = None\n+        self.cipher = None\n+\n+        # Identity\n+        self.identity = None\n+\n+        # TLS configurations\n+        self.tls_conf = None\n+\n+        # QoS configurations\n+        self.qos_details = None\n+\n+        self.publish_message = None\n+        self.mqtt_msg_attr = None\n+        self.client = None\n+\n+    @mock.patch.object(Mqtt, 'connect_soc')\n+    def test_init_no_msgattr_no_client_id(self, mock_connect):\n+        \"\"\"\n+        Test MqttDccComms initialisation without messaging attributes and no client ID\n+        :param mock_connect: Mocked MQTT connect method\n+        :return: None\n+        \"\"\"\n+\n+        # Instantiate client for DCC communication\n+        MqttDccComms(edge_system_name=self.edge_system.name, url=self.url, port=self.port, mqtt_msg_attr=None,\n+                     client_id=\"\", clean_session=self.clean_session)\n+\n+        # Read uuid.ini\n+        self.config.read(self.uuid_file)\n+\n+        edge_system_name = self.config.get('GATEWAY', 'name')\n+        local_uuid = self.config.get('GATEWAY', 'local-uuid')\n+\n+        # Compare stored edge system name\n+        self.assertEquals(edge_system_name, self.edge_system.name)\n+\n+        # Compare stored client-id\n+        self.assertEquals(local_uuid, systemUUID().get_uuid(self.edge_system.name))\n+\n+        # Check _connect method call has been made\n+        mock_connect.assert_called()\n+\n+    @mock.patch.object(Mqtt, 'connect_soc')\n+    def test_init_no_msgattr_with_client_id(self, mock_connect):\n+        \"\"\"\n+        Test MqttDccComms initialisation without messaging attributes and non-empty client ID\n+        :param mock_connect: Mocked MQTT connect method\n+        :return: None\n+        \"\"\"\n+        MqttDccComms(edge_system_name=self.edge_system.name, url=self.url, port=self.port, mqtt_msg_attr=None,\n+                     client_id=self.client_id, clean_session=self.clean_session)\n+\n+        # Read uuid.ini\n+        self.config.read(self.uuid_file)\n+\n+        edge_system_name = self.config.get('GATEWAY', 'name')\n+        local_uuid = self.config.get('GATEWAY', 'local-uuid')\n+\n+        # Validate stored edge system name\n+        self.assertEquals(edge_system_name, self.edge_system.name)\n+\n+        # Validate stored client-id\n+        self.assertEquals(local_uuid, self.client_id)\n+\n+        # Check _connect method call has been made\n+        mock_connect.assert_called()\n+\n+    @mock.patch.object(Mqtt, 'connect_soc')\n+    def test_init_with_valid_msgattr_with_client_id(self, mock_connect):\n+        \"\"\"\n+        Test MqttDccComms initialisation with valid messaging attributes and non-empty client id\n+        :param mock_connect: Mocked MQTT connect method\n+        :return: None\n+        \"\"\"\n+\n+        # Test with valid messaging attributes\n+        client = MqttDccComms(edge_system_name=self.edge_system.name, url=self.url, port=self.port,\n+                              client_id=self.client_id, clean_session=self.clean_session,\n+                              mqtt_msg_attr=self.mqtt_msg_attr)\n+\n+        # Validate client id\n+        self.assertEquals(client.client_id, self.client_id)\n+\n+        # Check connect_soc call has been made\n+        mock_connect.assert_called()\n+\n+    @mock.patch.object(Mqtt, 'connect_soc')\n+    def test_init_with_valid_msg_attr_empty_client_id(self, mock_connect):\n+        \"\"\"\n+        Test MqttDccComms initialisation with valid messaging attributes with empty client id to check implementation \n+        creating the ini file. \n+        :param mock_connect: Mocked MQTT connect method\n+        :return: None\n+        \"\"\"\n+\n+        # Test with valid messaging attributes\n+        MqttDccComms(edge_system_name=self.edge_system.name,\n+                     url=self.url, port=self.port, client_id=\"\", clean_session=self.clean_session,\n+                     mqtt_msg_attr=self.mqtt_msg_attr)\n+\n+        # Check uuid file get created or not\n+        self.assertFalse(os.path.exists(self.uuid_file))\n+","path":"tests/unit/dcc_comms/test_mqtt_dcc_comms.py","position":267,"original_position":267,"commit_id":"41ad612c06a3f81baa67f0a7153b968a4bda9e1c","original_commit_id":"41ad612c06a3f81baa67f0a7153b968a4bda9e1c","user":{"login":"Venkat2811","id":10533729,"avatar_url":"https://avatars2.githubusercontent.com/u/10533729?v=3","gravatar_id":"","url":"https://api.github.com/users/Venkat2811","html_url":"https://github.com/Venkat2811","followers_url":"https://api.github.com/users/Venkat2811/followers","following_url":"https://api.github.com/users/Venkat2811/following{/other_user}","gists_url":"https://api.github.com/users/Venkat2811/gists{/gist_id}","starred_url":"https://api.github.com/users/Venkat2811/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Venkat2811/subscriptions","organizations_url":"https://api.github.com/users/Venkat2811/orgs","repos_url":"https://api.github.com/users/Venkat2811/repos","events_url":"https://api.github.com/users/Venkat2811/events{/privacy}","received_events_url":"https://api.github.com/users/Venkat2811/received_events","type":"User","site_admin":false},"body":"check assertEquals for client_id and MqttDccComms.client_id","created_at":"2017-04-06T13:28:46Z","updated_at":"2017-04-06T13:46:37Z","html_url":"https://github.com/Venkat2811/liota/pull/10#discussion_r110160737","pull_request_url":"https://api.github.com/repos/Venkat2811/liota/pulls/10","_links":{"self":{"href":"https://api.github.com/repos/Venkat2811/liota/pulls/comments/110160737"},"html":{"href":"https://github.com/Venkat2811/liota/pull/10#discussion_r110160737"},"pull_request":{"href":"https://api.github.com/repos/Venkat2811/liota/pulls/10"}}},"pull_request":{"url":"https://api.github.com/repos/Venkat2811/liota/pulls/10","id":114594978,"html_url":"https://github.com/Venkat2811/liota/pull/10","diff_url":"https://github.com/Venkat2811/liota/pull/10.diff","patch_url":"https://github.com/Venkat2811/liota/pull/10.patch","issue_url":"https://api.github.com/repos/Venkat2811/liota/issues/10","number":10,"state":"open","locked":false,"title":"Unit Test Cases Mqtt DCC Comms and MQTT Device Comms","user":{"login":"sanket-kulkarni-vmware","id":20792152,"avatar_url":"https://avatars0.githubusercontent.com/u/20792152?v=3","gravatar_id":"","url":"https://api.github.com/users/sanket-kulkarni-vmware","html_url":"https://github.com/sanket-kulkarni-vmware","followers_url":"https://api.github.com/users/sanket-kulkarni-vmware/followers","following_url":"https://api.github.com/users/sanket-kulkarni-vmware/following{/other_user}","gists_url":"https://api.github.com/users/sanket-kulkarni-vmware/gists{/gist_id}","starred_url":"https://api.github.com/users/sanket-kulkarni-vmware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sanket-kulkarni-vmware/subscriptions","organizations_url":"https://api.github.com/users/sanket-kulkarni-vmware/orgs","repos_url":"https://api.github.com/users/sanket-kulkarni-vmware/repos","events_url":"https://api.github.com/users/sanket-kulkarni-vmware/events{/privacy}","received_events_url":"https://api.github.com/users/sanket-kulkarni-vmware/received_events","type":"User","site_admin":false},"body":"- MqttDCCComms\r\n\r\n- MqttDeviceComms\r\n\r\n- Mqtt Transport few enhancements and changes as per latest implementation","created_at":"2017-04-06T12:59:18Z","updated_at":"2017-04-06T13:46:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"23b4713628bc337744649e64b9183ccb73883617","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/Venkat2811/liota/pulls/10/commits","review_comments_url":"https://api.github.com/repos/Venkat2811/liota/pulls/10/comments","review_comment_url":"https://api.github.com/repos/Venkat2811/liota/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Venkat2811/liota/issues/10/comments","statuses_url":"https://api.github.com/repos/Venkat2811/liota/statuses/41ad612c06a3f81baa67f0a7153b968a4bda9e1c","head":{"label":"sanket-kulkarni-vmware:new-unit-test-cases","ref":"new-unit-test-cases","sha":"41ad612c06a3f81baa67f0a7153b968a4bda9e1c","user":{"login":"sanket-kulkarni-vmware","id":20792152,"avatar_url":"https://avatars0.githubusercontent.com/u/20792152?v=3","gravatar_id":"","url":"https://api.github.com/users/sanket-kulkarni-vmware","html_url":"https://github.com/sanket-kulkarni-vmware","followers_url":"https://api.github.com/users/sanket-kulkarni-vmware/followers","following_url":"https://api.github.com/users/sanket-kulkarni-vmware/following{/other_user}","gists_url":"https://api.github.com/users/sanket-kulkarni-vmware/gists{/gist_id}","starred_url":"https://api.github.com/users/sanket-kulkarni-vmware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sanket-kulkarni-vmware/subscriptions","organizations_url":"https://api.github.com/users/sanket-kulkarni-vmware/orgs","repos_url":"https://api.github.com/users/sanket-kulkarni-vmware/repos","events_url":"https://api.github.com/users/sanket-kulkarni-vmware/events{/privacy}","received_events_url":"https://api.github.com/users/sanket-kulkarni-vmware/received_events","type":"User","site_admin":false},"repo":{"id":81306257,"name":"liota","full_name":"sanket-kulkarni-vmware/liota","owner":{"login":"sanket-kulkarni-vmware","id":20792152,"avatar_url":"https://avatars0.githubusercontent.com/u/20792152?v=3","gravatar_id":"","url":"https://api.github.com/users/sanket-kulkarni-vmware","html_url":"https://github.com/sanket-kulkarni-vmware","followers_url":"https://api.github.com/users/sanket-kulkarni-vmware/followers","following_url":"https://api.github.com/users/sanket-kulkarni-vmware/following{/other_user}","gists_url":"https://api.github.com/users/sanket-kulkarni-vmware/gists{/gist_id}","starred_url":"https://api.github.com/users/sanket-kulkarni-vmware/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sanket-kulkarni-vmware/subscriptions","organizations_url":"https://api.github.com/users/sanket-kulkarni-vmware/orgs","repos_url":"https://api.github.com/users/sanket-kulkarni-vmware/repos","events_url":"https://api.github.com/users/sanket-kulkarni-vmware/events{/privacy}","received_events_url":"https://api.github.com/users/sanket-kulkarni-vmware/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/sanket-kulkarni-vmware/liota","description":null,"fork":true,"url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota","forks_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/forks","keys_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/keys{/key_id}","collaborators_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/teams","hooks_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/hooks","issue_events_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/issues/events{/number}","events_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/events","assignees_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/assignees{/user}","branches_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/branches{/branch}","tags_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/tags","blobs_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/git/refs{/sha}","trees_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/git/trees{/sha}","statuses_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/statuses/{sha}","languages_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/languages","stargazers_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/stargazers","contributors_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/contributors","subscribers_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/subscribers","subscription_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/subscription","commits_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/commits{/sha}","git_commits_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/git/commits{/sha}","comments_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/comments{/number}","issue_comment_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/issues/comments{/number}","contents_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/contents/{+path}","compare_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/compare/{base}...{head}","merges_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/merges","archive_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/downloads","issues_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/issues{/number}","pulls_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/pulls{/number}","milestones_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/milestones{/number}","notifications_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/labels{/name}","releases_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/releases{/id}","deployments_url":"https://api.github.com/repos/sanket-kulkarni-vmware/liota/deployments","created_at":"2017-02-08T08:31:23Z","updated_at":"2017-02-08T08:31:25Z","pushed_at":"2017-04-06T10:41:34Z","git_url":"git://github.com/sanket-kulkarni-vmware/liota.git","ssh_url":"git@github.com:sanket-kulkarni-vmware/liota.git","clone_url":"https://github.com/sanket-kulkarni-vmware/liota.git","svn_url":"https://github.com/sanket-kulkarni-vmware/liota","homepage":null,"size":627,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"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":"Venkat2811:unit-test-cases","ref":"unit-test-cases","sha":"b07251934fac619e7889c3fec989e48e41cc509f","user":{"login":"Venkat2811","id":10533729,"avatar_url":"https://avatars2.githubusercontent.com/u/10533729?v=3","gravatar_id":"","url":"https://api.github.com/users/Venkat2811","html_url":"https://github.com/Venkat2811","followers_url":"https://api.github.com/users/Venkat2811/followers","following_url":"https://api.github.com/users/Venkat2811/following{/other_user}","gists_url":"https://api.github.com/users/Venkat2811/gists{/gist_id}","starred_url":"https://api.github.com/users/Venkat2811/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Venkat2811/subscriptions","organizations_url":"https://api.github.com/users/Venkat2811/orgs","repos_url":"https://api.github.com/users/Venkat2811/repos","events_url":"https://api.github.com/users/Venkat2811/events{/privacy}","received_events_url":"https://api.github.com/users/Venkat2811/received_events","type":"User","site_admin":false},"repo":{"id":81095213,"name":"liota","full_name":"Venkat2811/liota","owner":{"login":"Venkat2811","id":10533729,"avatar_url":"https://avatars2.githubusercontent.com/u/10533729?v=3","gravatar_id":"","url":"https://api.github.com/users/Venkat2811","html_url":"https://github.com/Venkat2811","followers_url":"https://api.github.com/users/Venkat2811/followers","following_url":"https://api.github.com/users/Venkat2811/following{/other_user}","gists_url":"https://api.github.com/users/Venkat2811/gists{/gist_id}","starred_url":"https://api.github.com/users/Venkat2811/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Venkat2811/subscriptions","organizations_url":"https://api.github.com/users/Venkat2811/orgs","repos_url":"https://api.github.com/users/Venkat2811/repos","events_url":"https://api.github.com/users/Venkat2811/events{/privacy}","received_events_url":"https://api.github.com/users/Venkat2811/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Venkat2811/liota","description":null,"fork":true,"url":"https://api.github.com/repos/Venkat2811/liota","forks_url":"https://api.github.com/repos/Venkat2811/liota/forks","keys_url":"https://api.github.com/repos/Venkat2811/liota/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Venkat2811/liota/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Venkat2811/liota/teams","hooks_url":"https://api.github.com/repos/Venkat2811/liota/hooks","issue_events_url":"https://api.github.com/repos/Venkat2811/liota/issues/events{/number}","events_url":"https://api.github.com/repos/Venkat2811/liota/events","assignees_url":"https://api.github.com/repos/Venkat2811/liota/assignees{/user}","branches_url":"https://api.github.com/repos/Venkat2811/liota/branches{/branch}","tags_url":"https://api.github.com/repos/Venkat2811/liota/tags","blobs_url":"https://api.github.com/repos/Venkat2811/liota/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Venkat2811/liota/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Venkat2811/liota/git/refs{/sha}","trees_url":"https://api.github.com/repos/Venkat2811/liota/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Venkat2811/liota/statuses/{sha}","languages_url":"https://api.github.com/repos/Venkat2811/liota/languages","stargazers_url":"https://api.github.com/repos/Venkat2811/liota/stargazers","contributors_url":"https://api.github.com/repos/Venkat2811/liota/contributors","subscribers_url":"https://api.github.com/repos/Venkat2811/liota/subscribers","subscription_url":"https://api.github.com/repos/Venkat2811/liota/subscription","commits_url":"https://api.github.com/repos/Venkat2811/liota/commits{/sha}","git_commits_url":"https://api.github.com/repos/Venkat2811/liota/git/commits{/sha}","comments_url":"https://api.github.com/repos/Venkat2811/liota/comments{/number}","issue_comment_url":"https://api.github.com/repos/Venkat2811/liota/issues/comments{/number}","contents_url":"https://api.github.com/repos/Venkat2811/liota/contents/{+path}","compare_url":"https://api.github.com/repos/Venkat2811/liota/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Venkat2811/liota/merges","archive_url":"https://api.github.com/repos/Venkat2811/liota/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Venkat2811/liota/downloads","issues_url":"https://api.github.com/repos/Venkat2811/liota/issues{/number}","pulls_url":"https://api.github.com/repos/Venkat2811/liota/pulls{/number}","milestones_url":"https://api.github.com/repos/Venkat2811/liota/milestones{/number}","notifications_url":"https://api.github.com/repos/Venkat2811/liota/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Venkat2811/liota/labels{/name}","releases_url":"https://api.github.com/repos/Venkat2811/liota/releases{/id}","deployments_url":"https://api.github.com/repos/Venkat2811/liota/deployments","created_at":"2017-02-06T14:26:16Z","updated_at":"2017-02-06T14:26:17Z","pushed_at":"2017-04-06T12:59:19Z","git_url":"git://github.com/Venkat2811/liota.git","ssh_url":"git@github.com:Venkat2811/liota.git","clone_url":"https://github.com/Venkat2811/liota.git","svn_url":"https://github.com/Venkat2811/liota","homepage":null,"size":581,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"open_issues_count":3,"forks":2,"open_issues":3,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Venkat2811/liota/pulls/10"},"html":{"href":"https://github.com/Venkat2811/liota/pull/10"},"issue":{"href":"https://api.github.com/repos/Venkat2811/liota/issues/10"},"comments":{"href":"https://api.github.com/repos/Venkat2811/liota/issues/10/comments"},"review_comments":{"href":"https://api.github.com/repos/Venkat2811/liota/pulls/10/comments"},"review_comment":{"href":"https://api.github.com/repos/Venkat2811/liota/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Venkat2811/liota/pulls/10/commits"},"statuses":{"href":"https://api.github.com/repos/Venkat2811/liota/statuses/41ad612c06a3f81baa67f0a7153b968a4bda9e1c"}}}}
{"actor":{"display_login":"Venkat2811"}}