/******************************************************************************
* Copyright (c) 2000-2019 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:               TCCInterface_Example.ttcn
//  Description:        TCC Useful Functions: Interface Functions.
//  Rev:                R36B
//  Prodnr:             CNL 113 472
//  Updated:            2008-12-10
//  Contact:            http://ttcn.ericsson.se
//////////////////////////////////////////////////////////////////////////////

module TCCInterface_Example 
{

import from TCCInterface_Functions all;
type component test_CT { };

//////////////////////////////////////////////////////////////
// Interface functions
//////////////////////////////////////////////////////////////

testcase tc_test_getIpAddresses() runs on test_CT{
	var IPAddresses ips := f_getIpAddresses("google.com");
	if (not isvalue(ips)) {setverdict(fail)}
	log("google.com:",ips);
	ips := f_getIpAddresses("localhost");
	if (not isvalue(ips)) {setverdict(fail)}
	log("localhost", ips);
	ips := f_getIpAddresses("alma");
	if (not isvalue(ips)) {setverdict(fail)}
	log("empty string: ", ips);
	setverdict(pass);
}

testcase f_test_getIP() runs on test_CT
{
  var charstring ip, subnet, broadcast;    
  f_getIP("eth2",ip,subnet,broadcast);
  log("IP: " & ip);
  log("Subnetmask: " & subnet);
  log("Broadcast: " & broadcast);    
  setverdict(pass);
}

testcase f_test_getIP_IPv6() runs on test_CT
{
  var charstring ip, subnet, broadcast;    
  f_getIP("eth2",ip,subnet,broadcast,IPv6);
  log("IP: " & ip);
  log("Subnetmask: " & subnet);
  log("Broadcast: " & broadcast);    
  setverdict(pass);
}

// test f_getHostName function
testcase f_test_gethostname() runs on test_CT
{
  log(" ----------- f_getHostName ----------- ");
  log("Hostname: ", f_getHostName());
  setverdict(pass);
}

// test f_getIpAddr function
testcase f_test_getipaddr() runs on test_CT
{
  log(" ----------- f_getIpAddr IPv4 ----------- ");
  log("IP address: ", f_getIpAddr(f_getHostName()));
  setverdict(pass);  
}
 
// test f_getIpAddr IPv6 function
testcase f_test_getipaddr_IPv6() runs on test_CT
{  
  log(" ----------- f_getIpAddr IPv6 ----------- ");
  log("IP address: ", f_getIpAddr("localhost",IPv6));    
  setverdict(pass);
}

// test f_setInterfaceUp  function
testcase f_test_setInterfaceUp() runs on test_CT
{  
  log(" ----------- f_setInterfaceUp ----------- ");
  f_setInterfaceUp("eth3");  
   
  setverdict(pass);
}

// test f_setInterfaceDown  function
testcase f_test_setInterfaceDown() runs on test_CT
{  
  log(" ----------- f_setInterfaceDown ----------- ");
  f_setInterfaceDown("eth3");  
   
  setverdict(pass);
}

// test f_setIP  function
testcase f_test_setIP() runs on test_CT
{  
  log(" ----------- f_setIP ----------- ");
  f_setIP("eth3","192.168.20.21","255.255.255.255","192.168.20.255",1);  
   
  setverdict(pass);
}

testcase f_test_setIP_ip() runs on test_CT{
  log(" ----------- f_setIP_ip ----------- ");
  var boolean res := f_setIP_ip("eth0","192.169.1.1", 20);
  if (res){ setverdict(pass); } else 
    {setverdict(fail);}
}

testcase f_test_delIP_ip() runs on test_CT{
  log(" ----------- f_setIP_ip ----------- ");
  var boolean res := f_setIP_ip("eth0","192.169.1.1", 20);
  if (res){ setverdict(pass); } else 
    {setverdict(fail);}
}

control {
  execute(tc_test_getIpAddresses());
  execute(f_test_getIP());
  execute(f_test_gethostname());
  execute(f_test_getipaddr());

  execute(f_test_getIP_IPv6());  
  execute(f_test_getipaddr_IPv6());
  
  execute(f_test_setInterfaceUp()); //it works with root account, handle with care!
  execute(f_test_setInterfaceDown()); //it works with root account, handle with care!
  
  execute(f_test_setIP()); //it works with root account, handle with care!

  execute(f_test_setIP_ip());
  execute(f_test_delIP_ip());

}

}