コード例 #1
0
    def test_extract_flow_details(self, monkeypatch):
        def mock_config_get(package, parameter):
            if parameter == "etcd_port":
                return 2379
            elif parameter == "etcd_connection":
                return "0.0.0.0"

        manager = SampleManager("49fa2adde8a6e98591f0f5cb4bc5f44d")
        monkeypatch.setattr(manager._config, 'get', mock_config_get)
        syncJobThread = RpcJobProcessThread(manager)
        server = EtcdRPC(syncJobThread)

        flow_name = "tendrl.gluster_integration.flows." \
                    "create_volume.CreateVolume"

        definition = sample_definition

        result = server.extract_flow_details(flow_name, definition)

        assert result[0] == [
            'tendrl.gluster_integration.objects.volume.atoms.create'
        ]

        flow_name = 'tendrl.gluster_integration.objects.' \
                    'Volume.flows.start_volume.StartVolume'

        result = server.extract_flow_details(flow_name, definition)

        assert result[0] == [
            'tendrl.gluster_integration.objects.volume.atoms.start'
        ]
コード例 #2
0
    def test_etcdthread_stop(self):
        manager = SampleManager("49fa2adde8a6e98591f0f5cb4bc5f44d")
        user_request_thread = RpcJobProcessThread(manager)
        assert not user_request_thread._complete.is_set()

        user_request_thread.stop()

        assert user_request_thread._complete.is_set()
コード例 #3
0
ファイル: test_rpc.py プロジェクト: shtripat/node_agent
    def test_etcdthread_stop(self):
        manager = SampleManager()
        user_request_thread = EtcdThread(manager)
        assert not user_request_thread._complete.is_set()

        user_request_thread.stop()

        assert user_request_thread._complete.is_set()
コード例 #4
0
    def test_constructor(self, monkeypatch):
        def mock_config_get(package, parameter):
            if parameter == "etcd_port":
                return 2379
            elif parameter == "etcd_connection":
                return "0.0.0.0"

        manager = SampleManager("aa22a6fe-87f0-45cf-8b70-2d0ff4c02af6")
        monkeypatch.setattr(manager._config, 'get', mock_config_get)
        syncJobThread = RpcJobProcessThread(manager)
        server = EtcdRPC(syncJobThread)

        local_client = etcd.Client(port=2379, host="0.0.0.0")
        assert server.client.port == local_client.port
        assert server.client.host == local_client.host
        assert server.syncJobThread._manager.integration_id == \
            "aa22a6fe-87f0-45cf-8b70-2d0ff4c02af6"
コード例 #5
0
ファイル: test_rpc.py プロジェクト: shtripat/node_agent
    def test_etcdthread_run(self, monkeypatch):
        manager = SampleManager()
        user_request_thread = EtcdThread(manager)

        user_request_thread._complete.set()
        user_request_thread._run()

        user_request_thread2 = EtcdThread(manager)

        user_request_thread2.EXCEPTION_BACKOFF = 1

        def mock_server_run():
            raise Exception
        monkeypatch.setattr(user_request_thread._server,
                            'run', mock_server_run)

        assert True
コード例 #6
0
    def test_etcdthread_run(self, monkeypatch):
        manager = SampleManager("49fa2adde8a6e98591f0f5cb4bc5f44d")
        user_request_thread = RpcJobProcessThread(manager)

        user_request_thread._complete.set()
        user_request_thread._run()

        user_request_thread2 = RpcJobProcessThread(manager)

        user_request_thread2.EXCEPTION_BACKOFF = 1

        def mock_server_run():
            raise Exception

        monkeypatch.setattr(user_request_thread._server, 'run',
                            mock_server_run)

        assert True
コード例 #7
0
    def test_process_job_finished(self, monkeypatch):
        def mock_config_get(package, parameter):
            if parameter == "etcd_port":
                return 2379
            elif parameter == "etcd_connection":
                return "0.0.0.0"

        manager = SampleManager("49fa2adde8a6e98591f0f5cb4bc5f44d")
        monkeypatch.setattr(manager._config, 'get', mock_config_get)
        syncJobThread = RpcJobProcessThread(manager)
        server = EtcdRPC(syncJobThread)

        def mock_uuid4():
            return 'aa22a6fe-87f0-45cf-8b70-2d0ff4c02af6'

        monkeypatch.setattr(uuid, 'uuid4', mock_uuid4)

        def mock_etcd_write(key, value):
            pass

        monkeypatch.setattr(server.client, 'write', mock_etcd_write)

        def mock_invoke_flow(flow, job):
            raise FlowExecutionFailedError("Flow Execution failed")

        monkeypatch.setattr(server, 'invoke_flow', mock_invoke_flow)

        input_raw_job1 = {
            "status": "new",
            "sds_type": "generic",
            "cluster_id": "49fa2adde8a6e98591f0f5cb4bc5f44d",
            "errors": {},
            "attributes": {
                "_raw_params": "ls"
            },
            "type": "node",
            "message": "Executing command",
            "object_type": "generic",
            "flow": "ExecuteCommand"
        }
        server.validate_flow = MagicMock(return_value=False)
        raw_job, executed = server._process_job(
            input_raw_job1, "9a9604c0-d2a6-4be0-9a82-262f10037a8f", "node")
        assert raw_job['status'] == "finished"
コード例 #8
0
    def test_process_job_positive(self, monkeypatch):
        def mock_config_get(package, parameter):
            if parameter == "etcd_port":
                return 2379
            elif parameter == "etcd_connection":
                return "0.0.0.0"

        manager = SampleManager("49fa2adde8a6e98591f0f5cb4bc5f44d")
        monkeypatch.setattr(manager._config, 'get', mock_config_get)
        syncJobThread = RpcJobProcessThread(manager)
        server = EtcdRPC(syncJobThread)

        def mock_uuid4():
            return 'aa22a6fe-87f0-45cf-8b70-2d0ff4c02af6'

        monkeypatch.setattr(uuid, 'uuid4', mock_uuid4)

        def mock_etcd_write(key, value):
            pass

        monkeypatch.setattr(server.client, 'write', mock_etcd_write)

        def mock_invoke_flow(flow, job, definitions):
            return {"key1": "value1", "key2": "value2"}, "", ""

        monkeypatch.setattr(server, 'invoke_flow', mock_invoke_flow)

        input_raw_job1 = {
            "status":
            "new",
            "cluster_id":
            "49fa2adde8a6e98591f0f5cb4bc5f44d",
            "type":
            "node",
            "parameters": {
                "Node[]": ['node1', 'node2'],
                "sds_name": "gluster",
                "sds_version": "3.2.0",
                "cluster_id": "mycluster"
            },
            "run":
            "tendrl.node_agent.gluster_integration.flows"
            ".import_cluster.ImportCluster",
        }

        server.validate_flow = MagicMock(return_value=True)
        raw_job, executed = server._process_job(
            input_raw_job1, "9a9604c0-d2a6-4be0-9a82-262f10037a8f", "node")

        assert executed
        assert raw_job['status'] == "finished"
        assert raw_job['request_id'] == "49fa2adde8a6e98591f0f5cb4bc5f44d" \
            "/flow_aa22a6fe-87f0-45cf-8b70-2d0ff4c02af6"

        input_raw_job2 = {
            "status": "processing",
            "sds_type": "generic",
            "cluster_id": "49fa2adde8a6e98591f0f5cb4bc5f44d",
            "errors": {},
            "attributes": {
                "_raw_params": "ls"
            },
            "message": "Executing command",
            "type": "node",
            "object_type": "generic",
            "flow": "ExecuteCommand"
        }

        manager = SampleManager("49fa2adde8a6e98591f0f5cb4bc5f44d")
        monkeypatch.setattr(manager._config, 'get', mock_config_get)
        syncJobThread = RpcJobProcessThread(manager)
        server = EtcdRPC(syncJobThread)

        def mock_etcd_write(key, value):
            pass

        monkeypatch.setattr(server.client, 'write', mock_etcd_write)

        def mock_invoke_flow(flow, job):
            return {"key1": "value1", "key2": "value2"}, ""

        monkeypatch.setattr(server, 'invoke_flow', mock_invoke_flow)

        raw_job, executed = server._process_job(
            input_raw_job2, "9a9604c0-d2a6-4be0-9a82-262f10037a8f", "node")
        assert not executed

        input_raw_job3 = {
            "status": "new",
            "sds_type": "gluster",
            "cluster_id": "49fa2adde8a6e98591f0f5cb4bc5f44d",
            "errors": {},
            "attributes": {
                "_raw_params": "ls"
            },
            "message": "Executing command",
            "type": "sds",
            "object_type": "generic",
            "flow": "ExecuteCommand"
        }

        manager = SampleManager("49fa2adde8a6e98591f0f5cb4bc5f44d")
        monkeypatch.setattr(manager._config, 'get', mock_config_get)
        syncJobThread = RpcJobProcessThread(manager)
        server = EtcdRPC(syncJobThread)

        def mock_etcd_write(key, value):
            pass

        monkeypatch.setattr(server.client, 'write', mock_etcd_write)

        def mock_invoke_flow(flow, job):
            return {"key1": "value1", "key2": "value2"}, ""

        monkeypatch.setattr(server, 'invoke_flow', mock_invoke_flow)

        raw_job, executed = server._process_job(
            input_raw_job3, "9a9604c0-d2a6-4be0-9a82-262f10037a8f", "node")
        assert not executed
コード例 #9
0
 def test_etcdthread_constructor(self):
     manager = SampleManager("49fa2adde8a6e98591f0f5cb4bc5f44d")
     user_request_thread = RpcJobProcessThread(manager)
     assert isinstance(user_request_thread._manager, SampleManager)
     assert isinstance(user_request_thread._complete, gevent.event.Event)
     assert isinstance(user_request_thread._server, EtcdRPC)
コード例 #10
0
ファイル: server.py プロジェクト: monokles/projamming
 def playFromQueue():
     for i in ConnectionThread.playbackQueue:
         SampleManager.playFromFile(i)
     ConnectionThread.playbackQueue = []
     if running is True:
         Timer(0.125, ConnectionThread.playFromQueue, ()).start()
コード例 #11
0
ファイル: server.py プロジェクト: monokles/projamming
        while running:
            receive_data = self.socket.recv(1)
            if not receive_data:
                self.socket.close()
                print("[+] Closing connection with {}".format(self.remote_ip))
                return
            print("[+]received {}".format(receive_data))
            self.parseCommand(receive_data)


# set up server to create a new thread for all connections
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))

threads = []

Timer(0.125, ConnectionThread.playFromQueue, ()).start()
SampleManager.init()
print("Server is now online.\n")

while running:
    s.listen(1)
    (socket, (ip, port)) = s.accept()
    thread = ConnectionThread(ip, port, socket)
    thread.start()
    threads.append(thread)

for t in threads:
    t.join()
コード例 #12
0
ファイル: sniffer.py プロジェクト: monokles/projamming
    def doSniff(self):
        s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW,
                          socket.ntohs(0x0003))

        i = 0
        while True:
            i = i + 1
            packet = s.recvfrom(65565)
            packet = packet[0]

            source_mac = packet[6:12]
            if self.eth_addr(source_mac) == self.__ownmac:
                continue

            unique = ord(source_mac[5]) % 3

            eth_length = 14
            eth_header = packet[:eth_length]
            eth = unpack('!6s6sH', eth_header)
            eth_protocol = socket.ntohs(eth[2])

            if eth_protocol == 8:
                ip_header = packet[eth_length:20 + eth_length]

                iph = unpack('!BBHHHBBH4s4s', ip_header)

                version_ihl = iph[0]
                version = version_ihl >> 4
                ihl = version_ihl & 0xF
                iph_length = ihl * 4

                ttl = iph[5]
                protocol = iph[6]
                s_addr = socket.inet_ntoa(iph[8])
                d_addr = socket.inet_ntoa(iph[9])

                if (protocol == 1):  #ICMP
                    print "ICMP :D " + str(i)
                    SampleManager.playFromFile('bytes/icmp' + str(unique))

                elif (protocol == 17):  #UDP
                    u = iph_length + eth_length
                    udp_header = packet[u:u + 8]

                    udph = unpack('!HHHH', udp_header)
                    source_port = udph[0]
                    dest_port = udph[1]

                    if dest_port == 5353:  #MDNS
                        SampleManager.playFromFile('bytes/mdns')

                    elif dest_port == 53:  #DNS
                        SampleManager.playFromFile('bytes/dns')
                        print "DNS"

                    elif dest_port == 67 or dest_port == 68:  #DHCP
                        SampleManager.playFromFile('bytes/dhcp')

                    else:
                        print "Other UDP Packet"
                        print "src:" + str(source_port) + " dest:" + str(
                            dest_port)

                # else:
                #print "iph: "+str(protocol)
                #print iph

            elif eth_protocol == 1544:  #Guess: ARP
                SampleManager.playFromFile('bytes/arp')

            else:
                print "eth: " + str(eth_protocol)
                print eth
コード例 #13
0
ファイル: sniffer.py プロジェクト: monokles/projamming
    def doSniff(self):
        s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.ntohs(0x0003))
         
        i = 0
        while True:
            i = i + 1
            packet = s.recvfrom(65565)
            packet = packet[0]

            source_mac = packet[6:12];
            if self.eth_addr(source_mac) == self.__ownmac:
                continue             

            unique = ord(source_mac[5]) % 3;

            eth_length = 14
            eth_header = packet[:eth_length]
            eth = unpack('!6s6sH' , eth_header)
            eth_protocol = socket.ntohs(eth[2])

            if eth_protocol == 8:
                ip_header = packet[eth_length:20+eth_length]
                 
                iph = unpack('!BBHHHBBH4s4s' , ip_header)
                
                version_ihl = iph[0]
                version = version_ihl >> 4
                ihl = version_ihl & 0xF
                iph_length = ihl * 4        
 
                ttl = iph[5]
                protocol = iph[6]
                s_addr = socket.inet_ntoa(iph[8]);
                d_addr = socket.inet_ntoa(iph[9]);

                if (protocol == 1): #ICMP
                    print "ICMP :D "+str(i)
                    SampleManager.playFromFile('bytes/icmp'+str(unique))

                elif (protocol == 17): #UDP
                    u = iph_length + eth_length
                    udp_header = packet[u:u+8] 
                    
                    udph = unpack('!HHHH' , udp_header)
                    source_port = udph[0]
                    dest_port = udph[1]                    
                    
                    if dest_port == 5353: #MDNS
                        SampleManager.playFromFile('bytes/mdns')

                    elif dest_port == 53: #DNS
                        SampleManager.playFromFile('bytes/dns')
                        print "DNS"

                    elif dest_port == 67 or dest_port == 68: #DHCP
                        SampleManager.playFromFile('bytes/dhcp')    

                    else:
                        print "Other UDP Packet"
                        print "src:"+str(source_port)+" dest:"+str(dest_port)

                # else: 
                    #print "iph: "+str(protocol)
                    #print iph
            
            elif eth_protocol == 1544:  #Guess: ARP
                SampleManager.playFromFile('bytes/arp')

            else:
                print "eth: "+str(eth_protocol)
                print eth
コード例 #14
0
ファイル: server.py プロジェクト: monokles/projamming
 def playFromQueue():
     for i in ConnectionThread.playbackQueue:
         SampleManager.playFromFile(i)
     ConnectionThread.playbackQueue = []        
     if running is True:
         Timer(0.125, ConnectionThread.playFromQueue, ()).start()
コード例 #15
0
ファイル: server.py プロジェクト: monokles/projamming
            receive_data = self.socket.recv(1)
            if not receive_data:
                self.socket.close()
                print("[+] Closing connection with {}".format(self.remote_ip))
                return
            print("[+]received {}".format(receive_data))
            self.parseCommand(receive_data)



# set up server to create a new thread for all connections
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((HOST, PORT))

threads = []

Timer(0.125, ConnectionThread.playFromQueue, ()).start()
SampleManager.init()
print("Server is now online.\n")

while running:
    s.listen(1)
    (socket, (ip, port)) = s.accept()
    thread = ConnectionThread(ip, port, socket)
    thread.start()
    threads.append(thread)

for t in threads:
    t.join()
コード例 #16
0
ファイル: test_rpc.py プロジェクト: shtripat/node_agent
 def test_etcdthread_constructor(self):
     manager = SampleManager()
     user_request_thread = EtcdThread(manager)
     assert isinstance(user_request_thread._manager, SampleManager)
     assert isinstance(user_request_thread._complete, gevent.event.Event)
     assert isinstance(user_request_thread._server, EtcdRPC)