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' ]
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()
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()
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"
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
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
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"
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
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)
def playFromQueue(): for i in ConnectionThread.playbackQueue: SampleManager.playFromFile(i) ConnectionThread.playbackQueue = [] if running is True: Timer(0.125, ConnectionThread.playFromQueue, ()).start()
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()
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
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
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()
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)