///////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000-2021 Ericsson Telecom AB
//
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v2.0
// which accompanies this distribution, and is available at
// https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
///////////////////////////////////////////////////////////////////////////////
//  File:               IOT_App_Definitions.ttcn
//  Description:
//  Rev:                R1B
//  Prodnr:             CNL 113 909
//  Updated:            2021-02-03
//  Contact:            http://ttcn.ericsson.se
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
//  Module: IOT_App_Definitions
// 
//  Purpose:
//    This module contains the definitions for RIoT's main component
//
//  Detailed comments:
//    RIoT is a load generator built on top of the TitanSim load generator framework. It is
//    capable of simulating devices using some IoT protocols (CoAP, LwM2M, MQTT, HTTP). RIoT
//    (and the TitanSim framework) was created to support non-functional tests, where load generation
//    is required like performance, stability, scalability.
//
//  Module depends on:
//    - <EPTF_CLL_Base_Definitions>
//    - <EPTF_CLL_DsRestAPI_Definitions>
// 
//  Module Parameters:
//    tsp_EPTF_DsRestAPI_HTTPServer_RemoteAddress - <tsp_EPTF_DsRestAPI_HTTPServer_RemoteAddress> - *charstring* - the IP address of the REST API server
//    tsp_EPTF_DsRestAPI_HTTPServer_RemotePort - <tsp_EPTF_DsRestAPI_HTTPServer_RemotePort> - *charstring* - the port number of the REST API server
//    tsp_EPTF_DsRestAPI_HTTPServer_directory - <tsp_EPTF_DsRestAPI_HTTPServer_directory> - *charstring* - the path of REST API HTTP server directory
//    tsp_EPTF_DsRestAPI_customizableApp_directory - <tsp_EPTF_DsRestAPI_customizableApp_directory> - *charstring* - the path of the REST API customizableApp directory
//    tsp_EPTF_DsRestAPI_API_directory - <tsp_EPTF_DsRestAPI_API_directory> - *charstring* - the path of DsRestAPI API directory
//
//  Configuration:
//    - <tsp_EPTF_ExecCtrl_LGenPool_Declarators>
//    - <tsp_EPTF_ExecCtrl_EntityGroup2LGenPool_List>
//    - <tsp_LGenBase_EntityGrpDeclarators>
//    - <tsp_EPTF_ExecCtrl_Scenario2EntityGroupList>
//    - <tsp_LGenBase_TcMgmt_ScenarioDeclarators3>
//    - <tsp_LGenBase_TcMgmt_tcTypeDeclarators2>
//    - <tsp_IOT_LGen_FSMs>
//
//  Component Diagram:
//   (see IOT_App_Definitions.components.jpg)
//
//  Related Types:
//    - <IOT_App_CT>
//    - <IOT_LGen_CT>
//    - <EPTF_ExecCtrl_CT>
///////////////////////////////////////////////////////////////
module IOT_App_Definitions
{
  import from EPTF_CLL_Base_Definitions all;
  import from EPTF_CLL_DsRestAPI_Definitions all;
  
 /*****************************************************************
  @startuml IOT_App_Definitions.components.jpg
  package "RIoT" {
    class IOT_App_CT {
      TC()
    }
    class EPTF_ExecCtrl_CT {
      f_IOT_App_startExecCtrl()
      f_IOT_LGen_create()
    }
    class IOT_LGen_CT {
      f_IOT_LGen_behavior()
    }
    IOT_App_CT "1" <-> "*" IOT_LGen_CT
    IOT_App_CT "1" <-> "1" EPTF_ExecCtrl_CT
    EPTF_ExecCtrl_CT "1" <-> "*" IOT_LGen_CT
  }
  package "GUI" {
  }
  RIoT <-> GUI
  @enduml
  ******************************************************************/
  
  ///////////////////////////////////////////////////////////
  //  Module parameter: tsp_EPTF_DsRestAPI_HTTPServer_RemoteAddress
  // 
  //  Purpose:
  //    IP address of the REST API server
  //
  //  Type:
  //     *charstring*
  //
  //  Default value:
  //     *"127.0.0.1"*
  ///////////////////////////////////////////////////////////
  modulepar charstring 	tsp_EPTF_DsRestAPI_HTTPServer_RemoteAddress := "127.0.0.1";

  ///////////////////////////////////////////////////////////
  //  Module parameter: tsp_EPTF_DsRestAPI_HTTPServer_RemotePort
  // 
  //  Purpose:
  //    Port number of the REST API server
  //
  //  Type:
  //     *integer*
  //
  //  Default value:
  //     *4040*
  ///////////////////////////////////////////////////////////
  modulepar integer 	tsp_EPTF_DsRestAPI_HTTPServer_RemotePort := 4040;

  ///////////////////////////////////////////////////////////
  //  Module parameter: tsp_EPTF_DsRestAPI_HTTPServer_directory
  // 
  //  Purpose:
  //    Path of REST API HTTP server directory
  //
  //  Type:
  //     *charstring*
  //
  //  Default value:
  //     *"./WebGUI/WebGUI_link/"*
  ///////////////////////////////////////////////////////////
  modulepar charstring	tsp_EPTF_DsRestAPI_HTTPServer_directory := "./WebGUI/WebGUI_link/";

  ///////////////////////////////////////////////////////////
  //  Module parameter: tsp_EPTF_DsRestAPI_customizableApp_directory
  // 
  //  Purpose:
  //    Path of the REST API customizableApp directory
  //
  //  Type:
  //     *charstring*
  //
  //  Default value:
  //     *"./WebGUI/GUICustomization_link"*
  ///////////////////////////////////////////////////////////
  modulepar charstring 	tsp_EPTF_DsRestAPI_customizableApp_directory := "./WebGUI/GUICustomization_link";

  ///////////////////////////////////////////////////////////
  //  Module parameter: tsp_EPTF_DsRestAPI_API_directory
  // 
  //  Purpose:
  //    Path of DsRestAPI API directory
  //
  //  Type:
  //     *charstring*
  //
  //  Default value:
  //     *"./WebGUI/Js_link"*
  ///////////////////////////////////////////////////////////
  modulepar charstring 	tsp_EPTF_DsRestAPI_API_directory := "./WebGUI/Js_link";  

  ///////////////////////////////////////////////////////////
  // Type: IOT_App_CT
  //
  // Purpose:
  //   RIoT application's main component providing a REST API to the environment
  //
  // Extensions:
  //  - <EPTF_Base_CT>
  //  - <EPTF_DsRestAPI_CT>
  //
  // Related Functions:
  //   - <TC> () - The main test case function, entry point of the application
  ///////////////////////////////////////////////////////////
  type component IOT_App_CT extends EPTF_Base_CT, EPTF_DsRestAPI_CT
  {
    var boolean v_ready := false; 
  }
}
