///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2017 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// which accompanies this distribution, and is available at
// http://www.eclipse.org/legal/epl-v10.html
///////////////////////////////////////////////////////////////////////////////
//  File:               MqttTestSuite_Interop.ttcn
//  Description:
//  Rev:                R1A
//  Prodnr:             LPA 108 661
//  Updated:            2017-09-01
//  Contact:            http://ttcn.ericsson.se
///////////////////////////////////////////////////////////////////////////////
module MqttTestSuite_Interop
{
  import from IoT_FT_Framework_Definitions all;
  import from IoT_FT_Framework_Functions all;
  import from IFW_MQTT_Client_TestSteps all;
  import from MQTT_v3_1_1_Types all;

  testcase tc_Mqtt_client_connect_disconnect() runs on IFW_MAIN_CT
  {
    setverdict(pass);
	 
	var integer mqtt_client := f_IFW_addComponent(MQTT_CLIENT, "mqtt_client");
	
	f_IFW_MqttClient_setRemote(mqtt_client, "mqtt_server");
	  
	f_IFW_initComponents();
	  
	f_connect(mqtt_client);
	
	f_disconnect(mqtt_client);    
    
    f_IFW_cleanUp();
  }
  
  testcase tc_Mqtt_client_subscribe() runs on IFW_MAIN_CT
  {
    setverdict(pass);
	 
	var integer mqtt_client := f_IFW_addComponent(MQTT_CLIENT, "mqtt_client");
	
	f_IFW_MqttClient_setRemote(mqtt_client, "mqtt_server");
	  
	f_IFW_initComponents();
	  
	f_connect(mqtt_client);
	
    f_IFW_MqttClient_setMessageToSend(mqtt_client, valueof(t_subscribe("#", 2, AT_MOST_ONCE_DELIVERY)));
	f_IFW_MqttClient_send(mqtt_client);
	
    f_IFW_MqttClient_receive(mqtt_client);
    f_handleVerdict(f_IFW_MqttClient_check(mqtt_client, tr_suback({0}, 2)));
	
	f_disconnect(mqtt_client);    
    
    f_IFW_cleanUp();
  }
  
  testcase tc_Mqtt_client_unsubscribe() runs on IFW_MAIN_CT
  {
    setverdict(pass);
	 
	var integer mqtt_client := f_IFW_addComponent(MQTT_CLIENT, "mqtt_client");
	var integer vl_id := 2;
	
	f_IFW_MqttClient_setRemote(mqtt_client, "mqtt_server");
	  
	f_IFW_initComponents();
	  
	f_connect(mqtt_client);
	
	f_subscribe(mqtt_client, "room/topic", vl_id, AT_MOST_ONCE_DELIVERY);
	
	// Unsubscribe
    f_IFW_MqttClient_setMessageToSend(mqtt_client, valueof(t_unsubscribe("room/topic", 3)));
	f_IFW_MqttClient_send(mqtt_client);
	
    f_IFW_MqttClient_receive(mqtt_client);
    f_handleVerdict(f_IFW_MqttClient_check(mqtt_client, tr_unsuback(3)));   
	
	f_disconnect(mqtt_client);    
    
    f_IFW_cleanUp();
  }
  
  testcase tc_Mqtt_client_publish_qos0() runs on IFW_MAIN_CT
  {
    setverdict(pass);
	 
	var integer mqtt_client_A := f_IFW_addComponent(MQTT_CLIENT, "mqtt_client");
	var integer mqtt_client_B := f_IFW_addComponent(MQTT_CLIENT, "mqtt_client2");
	
	var charstring vl_topic := "room/topic";
	var integer vl_id := 1;
	
	f_IFW_MqttClient_setRemote(mqtt_client_A, "mqtt_server");
	f_IFW_MqttClient_setRemote(mqtt_client_B, "mqtt_server");
	  
	f_IFW_initComponents();
	  
	f_connect(mqtt_client_A);
	f_connect(mqtt_client_B);
	
	f_subscribe(mqtt_client_B, vl_topic, vl_id, AT_MOST_ONCE_DELIVERY);
	
    // Publish - QoS 0
    f_IFW_MqttClient_setMessageToSend(mqtt_client_A, 
      valueof(t_publish(vl_topic, omit, AT_MOST_ONCE_DELIVERY))
    );
	f_IFW_MqttClient_send(mqtt_client_A);
	
    f_IFW_MqttClient_receive(mqtt_client_B);
    f_handleVerdict(f_IFW_MqttClient_check(mqtt_client_B, 
    	t_publish(vl_topic, omit, AT_MOST_ONCE_DELIVERY))
    );   
	
	f_disconnect(mqtt_client_A);
	f_disconnect(mqtt_client_B);    
    
    f_IFW_cleanUp();
  }
  
  testcase tc_Mqtt_client_publish_qos1() runs on IFW_MAIN_CT
  {
    setverdict(pass);
	 
	var integer mqtt_client_A := f_IFW_addComponent(MQTT_CLIENT, "mqtt_client");
	var integer mqtt_client_B := f_IFW_addComponent(MQTT_CLIENT, "mqtt_client2");
	
	var charstring vl_topic := "room/topic";
	var integer vl_id := 1;
	
	f_IFW_MqttClient_setRemote(mqtt_client_A, "mqtt_server");
	f_IFW_MqttClient_setRemote(mqtt_client_B, "mqtt_server");
	  
	f_IFW_initComponents();
	  
	f_connect(mqtt_client_A);
	f_connect(mqtt_client_B);
	
	f_subscribe(mqtt_client_B, vl_topic, vl_id, AT_MOST_ONCE_DELIVERY);
	
    // Publish - QoS 0
    f_IFW_MqttClient_setMessageToSend(mqtt_client_A, 
      valueof(t_publish(vl_topic, vl_id, AT_LEAST_ONCE_DELIVERY))
    );
	f_IFW_MqttClient_send(mqtt_client_A);
	
    f_IFW_MqttClient_receive(mqtt_client_A);
    f_handleVerdict(f_IFW_MqttClient_check(mqtt_client_A, 
    	t_puback(vl_id))
    );
	
    f_IFW_MqttClient_receive(mqtt_client_B);
    f_handleVerdict(f_IFW_MqttClient_check(mqtt_client_B, 
    	t_publish(vl_topic, *, AT_MOST_ONCE_DELIVERY))
    );
	
	f_disconnect(mqtt_client_A);
	f_disconnect(mqtt_client_B);    
    
    f_IFW_cleanUp();
  }  
  
  template MQTT_v3_1_1_ReqResp t_publish(
    in charstring p_topic,
    in template integer p_id,
    in QoS p_qos) := 
  {
    publish := {
    	header := {
    		dup_flag := '0'B,
    		qos_level := p_qos,
    		retain_flag := '0'B
    	},
    	topic_name := p_topic,
    	packet_identifier := p_id,
    	payload := char2oct("publish qos 0 payload")
    }
  }
  
  template MQTT_v3_1_1_ReqResp t_puback(
    in template integer p_id) := 
  {
    puback := {
    	header := { flags := '0000'B },
    	packet_identifier := p_id
    }
  }
  
  function f_subscribe(
  	in integer p_client,
  	in charstring p_topic,
  	inout integer p_id,
  	in QoS p_qos)
  runs on IFW_MAIN_CT
  {
    f_IFW_MqttClient_setMessageToSend(p_client, valueof(t_subscribe(p_topic, p_id, p_qos)));
	f_IFW_MqttClient_send(p_client);
	
    f_IFW_MqttClient_receive(p_client);
    f_handleVerdict(f_IFW_MqttClient_check(p_client, tr_suback({?}, p_id)));
    
    f_nextPacketId(p_id);
  }
  
  template MQTT_v3_1_1_ReqResp t_subscribe(
  	in charstring p_topic,
  	in integer p_id,
  	in QoS p_qos) := 
  {
    subscribe := {
      header := { flags := '0010'B },
      packet_identifier := p_id,
      payload := {
        {
    	  topic_filter := p_topic,
    	  requested_qos := p_qos
        }
      }
    }
  }
  
  template MQTT_v3_1_1_ReqResp tr_suback(in template IntegerList p_code, in template integer p_id) := 
  {
    suback := {
      header := { flags := '0000'B },
      packet_identifier := p_id,
      payload := {
		return_code := p_code
      }
    }
  }
  
  function f_unsubscribe(in integer p_client, in charstring p_topic, inout integer p_id)
  runs on IFW_MAIN_CT
  {
    f_IFW_MqttClient_setMessageToSend(p_client, valueof(t_unsubscribe(p_topic, p_id)));
	f_IFW_MqttClient_send(p_client);
	
    f_IFW_MqttClient_receive(p_client);
    f_handleVerdict(f_IFW_MqttClient_check(p_client, tr_unsuback(p_id)));
    
    f_nextPacketId(p_id);
  }
  
  template MQTT_v3_1_1_ReqResp t_unsubscribe(in charstring p_topic, in integer p_id) := 
  {
    unsubscribe := {
      header := { flags := '0010'B },
      packet_identifier := p_id,
      payload := {
    	  topic_filter := { p_topic }
      }
    }
  }
  
  template MQTT_v3_1_1_ReqResp tr_unsuback(in template integer p_id) := 
  {
    unsuback := {
      header := { flags := '0000'B },
      packet_identifier := p_id
    }
  }
  
  function f_connect(in integer p_client) runs on IFW_MAIN_CT
  {
	f_IFW_MqttClient_setMessageToSend(p_client, valueof(t_connect(p_client)));
	f_IFW_MqttClient_send(p_client);
	
    f_IFW_MqttClient_receive(p_client);
    f_handleVerdict(f_IFW_MqttClient_check(p_client, tr_connectAck));
  }
  
  function f_disconnect(in integer p_client) runs on IFW_MAIN_CT
  {
  	f_IFW_MqttClient_setMessageToSend(p_client, valueof(t_disconnect));
	f_IFW_MqttClient_send(p_client);
  }
  
  template MQTT_v3_1_1_ReqResp t_connect(integer p_id) := 
  {
    connect_msg := {
      header := { flags := '0000'B },
      name := "MQTT",
      protocol_level := 4,
      flags := {
        user_name_flag := '0'B,
    	password_flag := '0'B,
    	will_retain := '0'B,
    	will_qos := AT_MOST_ONCE_DELIVERY,
    	will_flag := '0'B,
    	clean_session := '1'B
      },
      keep_alive := 0,
      payload := {        
    	client_identifier := "myclientid_"&int2str(p_id),
    	will_topic := omit,
    	will_message := omit,
    	user_name := omit,
    	password := omit
      }
    }
  }
  
  template MQTT_v3_1_1_ReqResp tr_connectAck := 
  {
    connack := {
      header := { flags := '0000'B },
      session_present_flag := '0'B,
      connect_return_code := 0
    }
  }
  
  template MQTT_v3_1_1_ReqResp t_disconnect := 
  {
    disconnect_msg := {
      header := { flags := '0000'B }
    }
  }
  
  function f_handleVerdict(in boolean p_verdict)
  {
    if (p_verdict) { setverdict(pass) }
    else { setverdict(fail) }
  }
  
  function f_nextPacketId(inout integer p_id)
  {
    p_id := p_id + 1;
  }
  
  control
  {
    execute(tc_Mqtt_client_connect_disconnect());
    execute(tc_Mqtt_client_subscribe());
    execute(tc_Mqtt_client_unsubscribe());
    execute(tc_Mqtt_client_publish_qos0());
    execute(tc_Mqtt_client_publish_qos1());
  }
}
