content: // Licensed to the Apache Software Foundation (ASF) under one
  // or more contributor license agreements.  See the NOTICE file
  // distributed with this work for additional information
  // regarding copyright ownership.  The ASF licenses this file
  // to you under the Apache License, Version 2.0 (the
  // "License"); you may not use this file except in compliance
  // with the License.  You may obtain a copy of the License at
  //
  //   http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing,
  // software distributed under the License is distributed on an
  // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  // KIND, either express or implied.  See the License for the
  // specific language governing permissions and limitations
  // under the License.
  package org.apache.cloudstack.network.tungsten.service;
  
  import org.apache.logging.log4j.LogManager;
  import org.apache.logging.log4j.Logger;
  import static org.junit.Assert.assertEquals;
  import static org.junit.Assert.assertFalse;
  import static org.junit.Assert.assertNotNull;
  import static org.junit.Assert.assertNull;
  import static org.junit.Assert.assertTrue;
  
  import net.juniper.tungsten.api.ApiConnector;
  import net.juniper.tungsten.api.ApiConnectorMock;
  import net.juniper.tungsten.api.ApiObjectBase;
  import net.juniper.tungsten.api.types.AddressGroup;
  import net.juniper.tungsten.api.types.ApplicationPolicySet;
  import net.juniper.tungsten.api.types.ConfigRoot;
  import net.juniper.tungsten.api.types.Domain;
  import net.juniper.tungsten.api.types.FirewallPolicy;
  import net.juniper.tungsten.api.types.FirewallRule;
  import net.juniper.tungsten.api.types.FloatingIp;
  import net.juniper.tungsten.api.types.FloatingIpPool;
  import net.juniper.tungsten.api.types.GlobalSystemConfig;
  import net.juniper.tungsten.api.types.GlobalVrouterConfig;
  import net.juniper.tungsten.api.types.InstanceIp;
  import net.juniper.tungsten.api.types.Loadbalancer;
  import net.juniper.tungsten.api.types.LoadbalancerHealthmonitor;
  import net.juniper.tungsten.api.types.LoadbalancerListener;
  import net.juniper.tungsten.api.types.LoadbalancerMember;
  import net.juniper.tungsten.api.types.LoadbalancerPool;
  import net.juniper.tungsten.api.types.LogicalRouter;
  import net.juniper.tungsten.api.types.NetworkPolicy;
  import net.juniper.tungsten.api.types.PolicyManagement;
  import net.juniper.tungsten.api.types.Project;
  import net.juniper.tungsten.api.types.SecurityGroup;
  import net.juniper.tungsten.api.types.ServiceGroup;
  import net.juniper.tungsten.api.types.Tag;
  import net.juniper.tungsten.api.types.TagType;
  import net.juniper.tungsten.api.types.VirtualMachine;
  import net.juniper.tungsten.api.types.VirtualMachineInterface;
  import net.juniper.tungsten.api.types.VirtualNetwork;
  import org.apache.cloudstack.network.tungsten.model.TungstenLoadBalancerMember;
  import org.apache.cloudstack.network.tungsten.model.TungstenRule;
  import org.junit.Assert;
  import org.junit.Before;
  import org.junit.Test;
  import org.junit.runner.RunWith;
  import org.mockito.junit.MockitoJUnitRunner;
  
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.Comparator;
  import java.util.List;
  import java.util.UUID;
  
  @RunWith(MockitoJUnitRunner.class)
  public class TungstenApiTest {
  
      protected Logger logger = LogManager.getLogger(getClass());
  
      private final TungstenApi tungstenApi = new TungstenApi();
      private Project project;
      private String projectUuid;
      private final String tungstenNetworkName = "TungstenNetworkTest";
      private final String tungstenNetworkUuid = UUID.randomUUID().toString();
      private final String tungstenVmName = "TungstenVmTest";
      private final String tungstenVmUuid = UUID.randomUUID().toString();
      private final String vmiName = "TungstenVirtualMachineInterfaceTest";
      private final String vmiUuid = UUID.randomUUID().toString();
      private String tungstenPublicNetworkName = "TungstenPublicNetworkTest";
      private String tungstenPublicNetworkUuid = UUID.randomUUID().toString();
      private String tungstenSecurityGroupName = "TungstenSecurityGroup";
      private String tungstenSecurityGroupUuid = UUID.randomUUID().toString();
      private String tungstenSecurityGroupRuleUuid = UUID.randomUUID().toString();
      private String tungstenLoadbalancerName = "TungstenLoadbalancer";
      private String tungstenLoadbalancerListenerName = "TungstenLoadbalancerListener";
      private String tungstenLoadbalancerPoolName = "TungstenLoadbalancerPool";
      private final Comparator<ApiObjectBase> comparator = Comparator.comparing(ApiObjectBase::getUuid);
  
      @Before
      public void setUp() throws Exception {
          logger.debug("Create Tungsten-Fabric api connector mock.");
          ApiConnector api = new ApiConnectorMock(null, 0);
  
          tungstenApi.setApiConnector(api);
          String domainUuid = UUID.randomUUID().toString();
          projectUuid = UUID.randomUUID().toString();
  
          //create Tungsten-Fabric default domain
          logger.debug("Create default domain in Tungsten-Fabric.");
          Domain domain = new Domain();
          domain.setUuid(domainUuid);
          String defaultDomainName = "default-domain";
          domain.setName(defaultDomainName);
          api.create(domain);
  
          //create Tungsten-Fabric default project
          logger.debug("Create default project in Tungsten-Fabric.");
          Project project = new Project();
          project.setUuid(projectUuid);
          String defaultProjectName = "default-project";
          project.setName(defaultProjectName);
          project.setParent(domain);
          api.create(project);
  
          this.project = (Project) api.findById(Project.class, projectUuid);
  
          // create Tungsten-Fabric default policy management
          PolicyManagement policyManagement = new PolicyManagement();
          policyManagement.setParent(new ConfigRoot());
          policyManagement.setName(TungstenApi.TUNGSTEN_DEFAULT_POLICY_MANAGEMENT);
          api.create(policyManagement);
  
          // create Tungsten-Fabric global system config
          GlobalSystemConfig globalSystemConfig = new GlobalSystemConfig();
          globalSystemConfig.setName(TungstenApi.TUNGSTEN_GLOBAL_SYSTEM_CONFIG);
          globalSystemConfig.setParent(new ConfigRoot());
          api.create(globalSystemConfig);
  
          // create Tungsten-Fabric global vrouter config
          GlobalVrouterConfig globalVrouterConfig = new GlobalVrouterConfig();
          globalVrouterConfig.setName(TungstenApi.TUNGSTEN_GLOBAL_VROUTER_CONFIG);
          globalVrouterConfig.setParent(globalSystemConfig);
          api.create(globalVrouterConfig);
      }
  
      @Test
      public void createTungstenNetworkTest() {
          logger.debug("Creating a virtual network in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName,
              projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false,
              ""));
  
          logger.debug("Get Tungsten-Fabric virtual network and check if it's not null.");
          assertNotNull(tungstenApi.getTungstenObject(VirtualNetwork.class, tungstenNetworkUuid));
      }
  
      @Test
      public void createTungstenVirtualMachineTest() {
          logger.debug("Create virtual machine in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName));
  
          logger.debug("Check if virtual machine was created in Tungsten-Fabric.");
          assertNotNull(tungstenApi.getTungstenObject(VirtualMachine.class, tungstenVmUuid));
      }
  
      @Test
      public void createTungstenVirtualMachineInterfaceTest() {
          logger.debug("Create fabric virtual network in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenNetwork(null, "ip-fabric", "ip-fabric",
              projectUuid, true, false, null, 0, null, true, null, null, null, false, false,
              ""));
  
          logger.debug("Create virtual network in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName,
              projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, true,
              ""));
  
          logger.debug("Create virtual machine in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName));
  
          String vmiMacAddress = "02:fc:f3:d6:83:c3";
          logger.debug("Create virtual machine interface in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, vmiMacAddress, tungstenNetworkUuid,
                  tungstenVmUuid, projectUuid, "10.0.0.1", true));
      }
  
      @Test
      public void deleteTungstenVirtualMachineInterfaceTest() {
          logger.debug("Create virtual network in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName,
              projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false,
              ""));
  
          logger.debug("Create virtual machine in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName));
  
          String vmiMacAddress = "02:fc:f3:d6:83:c3";
  
          logger.debug("Create virtual machine interface in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, vmiMacAddress, tungstenNetworkUuid,
                  tungstenVmUuid, projectUuid, "10.0.0.1", true);
  
          logger.debug("Check if the virtual machine interface was created in Tungsten-Fabric.");
          VirtualMachineInterface vmi = (VirtualMachineInterface) tungstenApi.getTungstenObject(VirtualMachineInterface.class, vmiUuid);
          assertNotNull(vmi);
  
          logger.debug("Delete virtual machine interface from Tungsten-Fabric.");
          assertTrue(tungstenApi.deleteTungstenVmInterface(vmi));
      }
  
      @Test
      public void createTungstenLogicalRouterTest() {
          logger.debug("Create public network in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenNetwork(tungstenPublicNetworkUuid, tungstenPublicNetworkName,
              tungstenPublicNetworkName, projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10",
              "10.0.0.20", false, false, ""));
  
          logger.debug("Create logical router in Tungsten-Fabric.");
          assertNotNull(
              tungstenApi.createTungstenLogicalRouter("TungstenLogicalRouter", projectUuid, tungstenPublicNetworkUuid));
      }
  
      @Test
      public void createTungstenSecurityGroupTest() {
          String projectFqn = TungstenApi.TUNGSTEN_DEFAULT_DOMAIN + ":" + TungstenApi.TUNGSTEN_DEFAULT_PROJECT;
  
          logger.debug("Create a security group in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenSecurityGroup(tungstenSecurityGroupUuid, tungstenSecurityGroupName,
              "TungstenSecurityGroupDescription", projectFqn));
  
          logger.debug("Check if the security group was created in Tungsten-Fabric.");
          SecurityGroup securityGroup = (SecurityGroup) tungstenApi.getTungstenObject(SecurityGroup.class,
              tungstenSecurityGroupUuid);
          assertNotNull(securityGroup);
      }
  
      @Test
      public void addTungstenSecurityGroupRuleTest() {
          String projectFqn = TungstenApi.TUNGSTEN_DEFAULT_DOMAIN + ":" + TungstenApi.TUNGSTEN_DEFAULT_PROJECT;
  
          logger.debug("Create a security group in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenSecurityGroup(tungstenSecurityGroupUuid, tungstenSecurityGroupName,
              "TungstenSecurityGroupDescription", projectFqn));
  
          //get Tungsten-Fabric security group
          SecurityGroup securityGroup = (SecurityGroup) tungstenApi.getTungstenObject(SecurityGroup.class,
              tungstenSecurityGroupUuid);
          assertNotNull(securityGroup);
  
          logger.debug("Add a Tungsten-Fabric security group rule to the security group added earlier");
          boolean result = tungstenApi.addTungstenSecurityGroupRule(tungstenSecurityGroupUuid,
              tungstenSecurityGroupRuleUuid, "ingress", 80, 90, "10.0.0.0/24", "IPv4", "tcp");
          assertTrue(result);
      }
  
      @Test
      public void removeTungstenSecurityGroupRuleTest() {
          String projectFqn = TungstenApi.TUNGSTEN_DEFAULT_DOMAIN + ":" + TungstenApi.TUNGSTEN_DEFAULT_PROJECT;
  
          logger.debug("Create a security group in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenSecurityGroup(tungstenSecurityGroupUuid, "TungstenSecurityGroup",
              "TungstenSecurityGroupDescription", projectFqn));
  
          //get Tungsten-Fabric security group
          SecurityGroup securityGroup = (SecurityGroup) tungstenApi.getTungstenObject(SecurityGroup.class,
              tungstenSecurityGroupUuid);
          assertNotNull(securityGroup);
  
          logger.debug("Add a Tungsten-Fabric security group rule to the security group added earlier");
          boolean result1 = tungstenApi.addTungstenSecurityGroupRule(tungstenSecurityGroupUuid,
              "0a01e4c7-d912-4bd5-9786-5478e3dae7b2", "ingress", 80, 90, "10.0.0.0/24", "IPv4", "tcp");
          assertTrue(result1);
  
          logger.debug("Add a Tungsten-Fabric security group rule to the security group added earlier");
          boolean result2 = tungstenApi.addTungstenSecurityGroupRule(tungstenSecurityGroupUuid,
              "fe44b353-21e7-4e6c-af18-1325c5ef886a", "egress", 80, 90, "securitygroup", "IPv4", "tcp");
          assertTrue(result2);
  
          logger.debug("Delete the Tungsten-Fabric security group rule added earlier");
          assertTrue(
              tungstenApi.removeTungstenSecurityGroupRule(tungstenSecurityGroupUuid, "0a01e4c7-d912-4bd5-9786-5478e3dae7b2"));
      }
  
      @Test
      public void createTungstenLoadbalancerTest() {
          logger.debug("Creating a virtual network in Tungsten-Fabric.");
          createTungstenNetworkTest();
  
          logger.debug("Get tungsten virtual network and check if it's not null.");
          assertNotNull(tungstenApi.getTungstenObject(VirtualNetwork.class, tungstenNetworkUuid));
  
          logger.debug("Create virtual machine interface in Tungsten-Fabric.");
          createTungstenVirtualMachineInterfaceTest();
  
          logger.debug("Create loadbalancer in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenLoadbalancer(projectUuid, tungstenLoadbalancerName, vmiUuid,
              tungstenApi.getSubnetUuid(tungstenNetworkUuid), "192.168.2.100"));
  
          logger.debug("Check if the loadbalancer was created in Tungsten-Fabric");
          Project project = (Project) tungstenApi.getTungstenObject(Project.class, projectUuid);
          assertNotNull(tungstenApi.getTungstenObjectByName(Loadbalancer.class, project.getQualifiedName(),
              tungstenLoadbalancerName));
      }
  
      @Test
      public void createTungstenLoadbalancerListenerTest() {
          logger.debug("Create a loadbalancer in Tungsten-Fabric");
          createTungstenLoadbalancerTest();
  
          logger.debug("Get loadbalancer from Tungsten-Fabric");
          Project project = (Project) tungstenApi.getTungstenObject(Project.class, projectUuid);
          Loadbalancer loadbalancer = (Loadbalancer) tungstenApi.getTungstenObjectByName(Loadbalancer.class,
              project.getQualifiedName(), tungstenLoadbalancerName);
          assertNotNull(loadbalancer);
  
          logger.debug("Create a loadbalancer listener in Tungsten-Fabric");
          LoadbalancerListener loadbalancerListener =
              (LoadbalancerListener) tungstenApi.createTungstenLoadbalancerListener(
              projectUuid, loadbalancer.getUuid(), tungstenLoadbalancerListenerName, "tcp", 24);
  
          logger.debug("Check if the loadbalancer listener was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObject(LoadbalancerListener.class, loadbalancerListener.getUuid()));
      }
  
      @Test
      public void createTungstenLoadbalancerHealthMonitorTest() {
          logger.debug("Create a loadbalancer health monitor in Tungsten-Fabric");
          LoadbalancerHealthmonitor loadbalancerHealthmonitor =
              (LoadbalancerHealthmonitor) tungstenApi.createTungstenLoadbalancerHealthMonitor(
              projectUuid, "LoadbalancerHealthMonitor", "PING", 3, 5, 5, null, null, null);
          assertNotNull(loadbalancerHealthmonitor);
  
          logger.debug("Check if the loadbalancer health monitor was created in Tungsten-Fabric");
          assertNotNull(
              tungstenApi.getTungstenObject(LoadbalancerHealthmonitor.class, loadbalancerHealthmonitor.getUuid()));
      }
  
      @Test
      public void createTungstenLoadbalancerPoolTest() {
          logger.debug("Create a loadbalancer in Tungsten-Fabric");
          createTungstenLoadbalancerTest();
  
          logger.debug("Get loadbalancer from Tungsten-Fabric");
          Project project = (Project) tungstenApi.getTungstenObject(Project.class, projectUuid);
          Loadbalancer loadbalancer = (Loadbalancer) tungstenApi.getTungstenObjectByName(Loadbalancer.class,
              project.getQualifiedName(), tungstenLoadbalancerName);
          assertNotNull(loadbalancer);
  
          logger.debug("Create a loadbalancer listener in Tungsten-Fabric");
          LoadbalancerListener loadbalancerListener =
              (LoadbalancerListener) tungstenApi.createTungstenLoadbalancerListener(
              projectUuid, loadbalancer.getUuid(), tungstenLoadbalancerListenerName, "tcp", 24);
          assertNotNull(loadbalancerListener);
  
          logger.debug("Create a loadbalancer health monitor in Tungsten-Fabric");
          LoadbalancerHealthmonitor loadbalancerHealthmonitor =
              (LoadbalancerHealthmonitor) tungstenApi.createTungstenLoadbalancerHealthMonitor(
              projectUuid, "LoadbalancerHealthMonitor", "PING", 3, 5, 5, null, null, null);
          assertNotNull(loadbalancerHealthmonitor);
  
          logger.debug("Create a loadbalancer pool in Tungsten-Fabric");
          LoadbalancerPool loadbalancerPool = (LoadbalancerPool) tungstenApi.createTungstenLoadbalancerPool(projectUuid,
              loadbalancerListener.getUuid(), loadbalancerHealthmonitor.getUuid(), tungstenLoadbalancerPoolName,
              "ROUND_ROBIN", "TCP");
          assertNotNull(loadbalancerPool);
  
          logger.debug("Check if the loadbalancer pool was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObject(LoadbalancerPool.class, loadbalancerPool.getUuid()));
      }
  
      @Test
      public void createTungstenLoadbalancerMemberTest() {
          logger.debug("Create a loadbalancer pool in Tungsten-Fabric");
          createTungstenLoadbalancerPoolTest();
  
          logger.debug("Get the loadbalancer pool from Tungsten-Fabric");
          Project project = (Project) tungstenApi.getTungstenObject(Project.class, projectUuid);
          LoadbalancerPool loadbalancerPool = (LoadbalancerPool) tungstenApi.getTungstenObjectByName(
              LoadbalancerPool.class, project.getQualifiedName(), tungstenLoadbalancerPoolName);
          assertNotNull(loadbalancerPool);
  
          logger.debug("Create a loadbalancer member in Tungsten-Fabric");
          LoadbalancerMember loadbalancerMember = (LoadbalancerMember) tungstenApi.createTungstenLoadbalancerMember(
              loadbalancerPool.getUuid(), "TungstenLoadbalancerMember", "10.0.0.0", null, 24, 5);
          assertNotNull(loadbalancerMember);
  
          logger.debug("Check if the loadbalancer member was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObject(LoadbalancerMember.class, loadbalancerMember.getUuid()));
      }
  
      @Test
      public void createTungstenInstanceIpTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create a virtual machine in Tungsten-Fabric.");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Create virtual machine interface in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Check if the instance ip is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObjectByName(InstanceIp.class, null, "TungstenInstanceIp"));
  
          logger.debug("Create instance ip in Tungsten-Fabric");
          assertNotNull(
              tungstenApi.createTungstenInstanceIp("TungstenInstanceIp", "192.168.1.100", tungstenNetworkUuid,
                  vmiUuid));
  
          logger.debug("Check if the instance ip was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObjectByName(InstanceIp.class, null, "TungstenInstanceIp"));
      }
  
      @Test
      public void createTungstenInstanceIpWithSubnetTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create a virtual machine in Tungsten-Fabric.");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Create virtual machine interface in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Check if the instance ip is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObjectByName(InstanceIp.class, null, "TungstenInstanceIp"));
  
          logger.debug("Create instance ip in Tungsten-Fabric");
          assertNotNull(
              tungstenApi.createTungstenInstanceIp("TungstenInstanceIp", "192.168.1.100", tungstenNetworkUuid,
                  vmiUuid, tungstenApi.getSubnetUuid(tungstenNetworkUuid)));
  
          logger.debug("Check if the instance ip was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObjectByName(InstanceIp.class, null, "TungstenInstanceIp"));
      }
  
      @Test
      public void createTungstenFloatingIpPoolTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          VirtualNetwork virtualNetwork = tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName,
              tungstenNetworkName, projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10",
              "10.0.0.20", false, false, "");
  
          logger.debug("Check if the floating ip pool is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObjectByName(FloatingIpPool.class, virtualNetwork.getQualifiedName(),
              "TungstenFip"));
  
          logger.debug("Create instance ip in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenFloatingIpPool(tungstenNetworkUuid, "TungstenFip"));
  
          logger.debug("Check if the instance ip was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObjectByName(FloatingIpPool.class, virtualNetwork.getQualifiedName(),
              "TungstenFip"));
      }
  
      @Test
      public void createTungstenLbVmiTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Check if the lb vmi is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObjectByName(VirtualMachineInterface.class, project.getQualifiedName(),
              "TungstenLbVmi"));
  
          logger.debug("Create lb vmi in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenLbVmi("TungstenLbVmi", projectUuid, tungstenNetworkUuid));
  
          logger.debug("Check if the lb vmi was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObjectByName(VirtualMachineInterface.class, project.getQualifiedName(),
              "TungstenLbVmi"));
      }
  
      @Test
      public void updateTungstenObjectTest() {
          logger.debug("Create public network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenPublicNetworkName, tungstenPublicNetworkName,
              projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false,
              "");
  
          logger.debug("Creating a logical router in Tungsten-Fabric.");
          LogicalRouter logicalRouter = (LogicalRouter) tungstenApi.createTungstenLogicalRouter("TungstenLogicalRouter",
              projectUuid, tungstenNetworkUuid);
  
          logger.debug("Creating a vmi in Tungsten-Fabric.");
          VirtualMachineInterface virtualMachineInterface =
              (VirtualMachineInterface) tungstenApi.createTungstenGatewayVmi(
              vmiName, projectUuid, tungstenNetworkUuid);
  
          logger.debug("Check if the logical router vmi is not exist in Tungsten-Fabric");
          assertNull(logicalRouter.getVirtualMachineInterface());
  
          logger.debug("Update logical router with vmi");
          logicalRouter.setVirtualMachineInterface(virtualMachineInterface);
          tungstenApi.updateTungstenObject(logicalRouter);
  
          logger.debug("Check updated logical router have vmi uuid equals created vmi uuid");
          LogicalRouter updatedlogicalRouter = (LogicalRouter) tungstenApi.getTungstenObjectByName(LogicalRouter.class,
              project.getQualifiedName(), "TungstenLogicalRouter");
          assertEquals(virtualMachineInterface.getUuid(),
              updatedlogicalRouter.getVirtualMachineInterface().get(0).getUuid());
      }
  
      @Test
      public void createTungstenFloatingIpTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create instance ip in Tungsten-Fabric");
          FloatingIpPool floatingIpPool = (FloatingIpPool) tungstenApi.createTungstenFloatingIpPool(tungstenNetworkUuid,
              "TungstenFip");
  
          logger.debug("Check if the floating ip pool is not exist in Tungsten-Fabric");
          assertNull(
              tungstenApi.getTungstenObjectByName(FloatingIp.class, floatingIpPool.getQualifiedName(), "TungstenFi"));
  
          logger.debug("Create floating ip in Tungsten-Fabric");
          assertNotNull(
              tungstenApi.createTungstenFloatingIp(projectUuid, tungstenNetworkUuid, "TungstenFip", "TungstenFi",
                  "192.168.1.100"));
  
          logger.debug("Check if the lb vmi was created in Tungsten-Fabric");
          assertNotNull(
              tungstenApi.getTungstenObjectByName(FloatingIp.class, floatingIpPool.getQualifiedName(), "TungstenFi"));
      }
  
      @Test
      public void assignTungstenFloatingIpTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create instance ip in Tungsten-Fabric");
          tungstenApi.createTungstenFloatingIpPool(tungstenNetworkUuid, "TungstenFip");
  
          logger.debug("Create floating ip in Tungsten-Fabric");
          tungstenApi.createTungstenFloatingIp(projectUuid, tungstenNetworkUuid, "TungstenFip", "TungstenFi",
              "192.168.1.100");
  
          logger.debug("Create vm in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Creating a vmi in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Check if the floating ip was assigned in Tungsten-Fabric");
          Assert.assertTrue(
              tungstenApi.assignTungstenFloatingIp(tungstenNetworkUuid, vmiUuid, "TungstenFip", "TungstenFi",
                  "192.168.1.100"));
      }
  
      @Test
      public void releaseTungstenFloatingIpTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create instance ip in Tungsten-Fabric");
          tungstenApi.createTungstenFloatingIpPool(tungstenNetworkUuid, "TungstenFip");
  
          logger.debug("Create floating ip in Tungsten-Fabric");
          tungstenApi.createTungstenFloatingIp(projectUuid, tungstenNetworkUuid, "TungstenFip", "TungstenFi",
              "192.168.1.100");
  
          logger.debug("Create vm in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Creating a vmi in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Check if the floating ip was assigned in Tungsten-Fabric");
          tungstenApi.assignTungstenFloatingIp(tungstenNetworkUuid, vmiUuid, "TungstenFip", "TungstenFi",
              "192.168.1.100");
  
          logger.debug("Check if the floating ip was assigned in Tungsten-Fabric");
          Assert.assertTrue(tungstenApi.releaseTungstenFloatingIp(tungstenNetworkUuid, "TungstenFip", "TungstenFi"));
      }
  
      @Test
      public void createTungstenNetworkPolicyTest() {
          logger.debug("Prepare network policy rule 1");
          List<TungstenRule> tungstenRuleList1 = new ArrayList<>();
          TungstenRule tungstenRule1 = new TungstenRule("005f0dea-0196-11ec-a1ed-b42e99f6e187", "pass", ">", "tcp", null,
              "192.168.100.0", 24, 80, 80, null, "192.168.200.0", 24, 80, 80);
          tungstenRuleList1.add(tungstenRule1);
  
          logger.debug("Create a network policy in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createOrUpdateTungstenNetworkPolicy("policy1", projectUuid, tungstenRuleList1));
  
          logger.debug("Get created network policy and check if network policy rule has created");
          NetworkPolicy networkPolicy = (NetworkPolicy) tungstenApi.getTungstenObjectByName(NetworkPolicy.class,
              project.getQualifiedName(), "policy1");
          assertEquals("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              networkPolicy.getEntries().getPolicyRule().get(0).getRuleUuid());
  
          logger.debug("Prepare network policy rule 2");
          List<TungstenRule> tungstenRuleList2 = new ArrayList<>();
          TungstenRule tungstenRule2 = new TungstenRule("105f0dea-0196-11ec-a1ed-b42e99f6e187", "pass", ">", "tcp", null,
              "192.168.100.0", 24, 80, 80, null, "192.168.200.0", 24, 80, 80);
          tungstenRuleList2.add(tungstenRule2);
  
          logger.debug("update created network policy in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createOrUpdateTungstenNetworkPolicy("policy1", projectUuid, tungstenRuleList2));
  
          logger.debug("Get updated network policy and check if network policy rule has updated");
          NetworkPolicy networkPolicy1 = (NetworkPolicy) tungstenApi.getTungstenObjectByName(NetworkPolicy.class,
              project.getQualifiedName(), "policy1");
          assertEquals("105f0dea-0196-11ec-a1ed-b42e99f6e187",
              networkPolicy1.getEntries().getPolicyRule().get(1).getRuleUuid());
      }
  
      @Test
      public void applyTungstenNetworkPolicy() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Prepare network policy rule");
          List<TungstenRule> tungstenRuleList = new ArrayList<>();
  
          logger.debug("Create a network policy in Tungsten-Fabric.");
          NetworkPolicy networkPolicy = (NetworkPolicy) tungstenApi.createOrUpdateTungstenNetworkPolicy("policy",
              projectUuid, tungstenRuleList);
  
          logger.debug("Check if network policy was not applied in Tungsten-Fabric.");
          VirtualNetwork virtualNetwork1 = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertNull(virtualNetwork1.getNetworkPolicy());
  
          logger.debug("Apply network policy to network in Tungsten-Fabric.");
          assertNotNull(tungstenApi.applyTungstenNetworkPolicy(networkPolicy.getUuid(), tungstenNetworkUuid, 1, 1));
  
          logger.debug("Check if network policy was applied in Tungsten-Fabric.");
          VirtualNetwork virtualNetwork2 = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertNotNull(virtualNetwork2.getNetworkPolicy());
      }
  
      @Test
      public void getTungstenFabricNetworkTest() {
          logger.debug("Create fabric virtual network in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenNetwork(null, "ip-fabric", "ip-fabric",
              projectUuid, true, false, null, 0, null, true, null, null, null, false, false,
              ""));
  
          logger.debug("Check if fabric network was got in Tungsten-Fabric.");
          assertNotNull(tungstenApi.getTungstenFabricNetwork());
      }
  
      @Test
      public void createTungstenDomainTest() {
          logger.debug("Check if domain was created in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenDomain("domain", "0a01e4c7-d912-4bd5-9786-5478e3dae7b2"));
      }
  
      @Test
      public void createTungstenProjectTest() {
          logger.debug("Check if project was created in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenProject("project","fe44b353-21e7-4e6c-af18-1325c5ef886a","0a01e4c7-d912-4bd5-9786-5478e3dae7b2", "domain"));
      }
  
      @Test
      public void deleteTungstenDomainTest() {
          logger.debug("Create domain in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenDomain("domain", "0a01e4c7-d912-4bd5-9786-5478e3dae7b2"));
  
          logger.debug("Check if domain was deleted in Tungsten-Fabric.");
          assertTrue(tungstenApi.deleteTungstenDomain("0a01e4c7-d912-4bd5-9786-5478e3dae7b2"));
      }
  
      @Test
      public void deleteTungstenProjectTest() {
          logger.debug("Create project in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenProject("project","fe44b353-21e7-4e6c-af18-1325c5ef886a","0a01e4c7-d912-4bd5-9786-5478e3dae7b2", "domain"));
  
          logger.debug("Check if project was deleted in Tungsten-Fabric.");
          assertTrue(tungstenApi.deleteTungstenProject("fe44b353-21e7-4e6c-af18-1325c5ef886a"));
      }
  
      @Test
      public void getDefaultTungstenDomainTest() throws IOException {
          logger.debug("Check if default domain was got in Tungsten-Fabric.");
          assertNotNull(tungstenApi.getDefaultTungstenDomain());
      }
  
      @Test
      public void updateLoadBalancerMemberTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create a vm in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Creating a vmi in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Create loadbalancer in Tungsten-Fabric");
          Loadbalancer loadbalancer = (Loadbalancer) tungstenApi.createTungstenLoadbalancer(projectUuid,
              tungstenLoadbalancerName, vmiUuid, tungstenApi.getSubnetUuid(tungstenNetworkUuid), "192.168.2.100");
  
          logger.debug("Create a loadbalancer listener in Tungsten-Fabric");
          LoadbalancerListener loadbalancerListener =
              (LoadbalancerListener) tungstenApi.createTungstenLoadbalancerListener(
              projectUuid, loadbalancer.getUuid(), tungstenLoadbalancerListenerName, "tcp", 24);
  
          logger.debug("Create a loadbalancer health monitor in Tungsten-Fabric");
          LoadbalancerHealthmonitor loadbalancerHealthmonitor =
              (LoadbalancerHealthmonitor) tungstenApi.createTungstenLoadbalancerHealthMonitor(
              projectUuid, "LoadbalancerHealthMonitor", "PING", 3, 5, 5, null, null, null);
  
          logger.debug("Create a loadbalancer pool in Tungsten-Fabric");
          LoadbalancerPool loadbalancerPool = (LoadbalancerPool) tungstenApi.createTungstenLoadbalancerPool(projectUuid,
              loadbalancerListener.getUuid(), loadbalancerHealthmonitor.getUuid(), tungstenLoadbalancerPoolName,
              "ROUND_ROBIN", "TCP");
  
          logger.debug("Update loadbalancer member 1 in Tungsten-Fabric");
          List<TungstenLoadBalancerMember> tungstenLoadBalancerMemberList1 = new ArrayList<>();
          tungstenLoadBalancerMemberList1.add(new TungstenLoadBalancerMember("member1", "192.168.100.100", 80, 1));
          assertTrue(tungstenApi.updateLoadBalancerMember(projectUuid, tungstenLoadbalancerPoolName,
              tungstenLoadBalancerMemberList1, tungstenApi.getSubnetUuid(tungstenNetworkUuid)));
  
          logger.debug("Check if loadbalancer member 2 was updated in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObjectByName(LoadbalancerMember.class, loadbalancerPool.getQualifiedName(),
              "member1"));
  
          logger.debug("Update loadbalancer member 2 in Tungsten-Fabric");
          List<TungstenLoadBalancerMember> tungstenLoadBalancerMemberList2 = new ArrayList<>();
          tungstenLoadBalancerMemberList2.add(new TungstenLoadBalancerMember("member2", "192.168.100.100", 80, 1));
          assertTrue(tungstenApi.updateLoadBalancerMember(projectUuid, tungstenLoadbalancerPoolName,
              tungstenLoadBalancerMemberList2, tungstenApi.getSubnetUuid(tungstenNetworkUuid)));
  
          logger.debug("Check if loadbalancer member 1 was deleted in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObjectByName(LoadbalancerMember.class, loadbalancerPool.getQualifiedName(),
              "member1"));
  
          logger.debug("Check if loadbalancer member 2 was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObjectByName(LoadbalancerMember.class, loadbalancerPool.getQualifiedName(),
              "member2"));
      }
  
      @Test
      public void updateLoadBalancerPoolTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create floating ip in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Creating a vmi in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Create loadbalancer in Tungsten-Fabric");
          Loadbalancer loadbalancer = (Loadbalancer) tungstenApi.createTungstenLoadbalancer(projectUuid,
              tungstenLoadbalancerName, vmiUuid, tungstenApi.getSubnetUuid(tungstenNetworkUuid), "192.168.2.100");
  
          logger.debug("Create a loadbalancer listener in Tungsten-Fabric");
          LoadbalancerListener loadbalancerListener =
              (LoadbalancerListener) tungstenApi.createTungstenLoadbalancerListener(
              projectUuid, loadbalancer.getUuid(), tungstenLoadbalancerListenerName, "tcp", 24);
  
          logger.debug("Create a loadbalancer health monitor in Tungsten-Fabric");
          LoadbalancerHealthmonitor loadbalancerHealthmonitor =
              (LoadbalancerHealthmonitor) tungstenApi.createTungstenLoadbalancerHealthMonitor(
              projectUuid, "LoadbalancerHealthMonitor", "PING", 3, 5, 5, null, null, null);
  
          logger.debug("Create a loadbalancer pool in Tungsten-Fabric");
          tungstenApi.createTungstenLoadbalancerPool(projectUuid, loadbalancerListener.getUuid(),
              loadbalancerHealthmonitor.getUuid(), tungstenLoadbalancerPoolName, "ROUND_ROBIN", "TCP");
  
          logger.debug("Update loadbalancer pool in Tungsten-Fabric");
          assertTrue(
              tungstenApi.updateLoadBalancerPool(projectUuid, tungstenLoadbalancerPoolName, "SOURCE_IP", "APP_COOKIE",
                  "cookie", "UDP", true, "80", "/stats", "admin:abc"));
  
          logger.debug("Check if loadbalancer pool was updated in Tungsten-Fabric");
          LoadbalancerPool loadbalancerPool = (LoadbalancerPool) tungstenApi.getTungstenObjectByName(
              LoadbalancerPool.class, project.getQualifiedName(), tungstenLoadbalancerPoolName);
          assertEquals("SOURCE_IP", loadbalancerPool.getProperties().getLoadbalancerMethod());
          assertEquals("APP_COOKIE", loadbalancerPool.getProperties().getSessionPersistence());
          assertEquals("cookie", loadbalancerPool.getProperties().getPersistenceCookieName());
          assertEquals("UDP", loadbalancerPool.getProperties().getProtocol());
      }
  
      @Test
      public void updateLoadBalancerListenerTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create floating ip in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Creating a vmi in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Create loadbalancer in Tungsten-Fabric");
          Loadbalancer loadbalancer = (Loadbalancer) tungstenApi.createTungstenLoadbalancer(projectUuid,
              tungstenLoadbalancerName, vmiUuid, tungstenApi.getSubnetUuid(tungstenNetworkUuid), "192.168.2.100");
  
          logger.debug("Create a loadbalancer listener in Tungsten-Fabric");
          tungstenApi.createTungstenLoadbalancerListener(projectUuid, loadbalancer.getUuid(),
              tungstenLoadbalancerListenerName, "tcp", 24);
  
          logger.debug("update loadbalancer listener in Tungsten-Fabric");
          assertTrue(tungstenApi.updateLoadBalancerListener(projectUuid, tungstenLoadbalancerListenerName, "udp", 25,
              "http://host:8080/client/getLoadBalancerSslCertificate"));
  
          logger.debug("Check if loadbalancer listener was updated in Tungsten-Fabric");
          LoadbalancerListener loadbalancerListener = (LoadbalancerListener) tungstenApi.getTungstenObjectByName(
              LoadbalancerListener.class, project.getQualifiedName(), tungstenLoadbalancerListenerName);
          assertEquals("udp", loadbalancerListener.getProperties().getProtocol());
          assertEquals(Integer.valueOf(25), loadbalancerListener.getProperties().getProtocolPort());
          assertEquals("http://host:8080/client/getLoadBalancerSslCertificate",
              loadbalancerListener.getProperties().getDefaultTlsContainer());
      }
  
      @Test
      public void applyTungstenPortForwardingTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create instance ip in Tungsten-Fabric");
          tungstenApi.createTungstenFloatingIpPool(tungstenNetworkUuid, "TungstenFip");
  
          logger.debug("Create floating ip in Tungsten-Fabric");
          FloatingIp floatingIp = (FloatingIp) tungstenApi.createTungstenFloatingIp(projectUuid, tungstenNetworkUuid,
              "TungstenFip", "TungstenFi", "192.168.1.100");
  
          logger.debug("Create floating ip in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Creating a vmi in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Check if the port mapping is not exist in Tungsten-Fabric");
          assertNull(floatingIp.getPortMappings());
          assertNull(floatingIp.getVirtualMachineInterface());
          assertNull(floatingIp.getPortMappingsEnable());
  
          logger.debug("Check if the port mapping was add in Tungsten-Fabric");
          assertTrue(
              tungstenApi.applyTungstenPortForwarding(true, tungstenNetworkUuid, "TungstenFip", "TungstenFi", vmiUuid,
                  "tcp", 8080, 80));
          assertEquals("tcp", floatingIp.getPortMappings().getPortMappings().get(0).getProtocol());
          assertEquals(Integer.valueOf(8080), floatingIp.getPortMappings().getPortMappings().get(0).getSrcPort());
          assertEquals(Integer.valueOf(80), floatingIp.getPortMappings().getPortMappings().get(0).getDstPort());
          assertNotNull(floatingIp.getVirtualMachineInterface());
          assertTrue(floatingIp.getPortMappingsEnable());
  
          logger.debug("Check if the port mapping was remove in Tungsten-Fabric");
          assertTrue(tungstenApi.applyTungstenPortForwarding(false, tungstenNetworkUuid, "TungstenFip", "TungstenFi",
              vmiUuid, "tcp", 8080, 80));
          assertEquals(0, floatingIp.getPortMappings().getPortMappings().size());
          assertEquals(0, floatingIp.getVirtualMachineInterface().size());
          assertFalse(floatingIp.getPortMappingsEnable());
      }
  
      @Test
      public void addTungstenNetworkSubnetCommandTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          VirtualNetwork virtualNetwork = tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName,
              tungstenNetworkName, projectUuid, true, false, null, 0, null, false, null, null, null, false, false, null);
  
          logger.debug("Check if network ipam subnet is empty in Tungsten-Fabric");
          assertNull(virtualNetwork.getNetworkIpam());
  
          logger.debug("Check if network ipam subnet was added to network in Tungsten-Fabric");
          assertTrue(tungstenApi.addTungstenNetworkSubnetCommand(tungstenNetworkUuid, "10.0.0.0", 24, "10.0.0.1", true,
              "10.0.0.253", "10.0.0.10", "10.0.0.20", true, "subnetName"));
          VirtualNetwork virtualNetwork1 = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertNotNull(virtualNetwork1.getNetworkIpam());
          assertEquals("10.0.0.0",
              virtualNetwork1.getNetworkIpam().get(0).getAttr().getIpamSubnets().get(0).getSubnet().getIpPrefix());
          assertEquals(Integer.valueOf(24),
              virtualNetwork1.getNetworkIpam().get(0).getAttr().getIpamSubnets().get(0).getSubnet().getIpPrefixLen());
          assertEquals("10.0.0.1",
              virtualNetwork1.getNetworkIpam().get(0).getAttr().getIpamSubnets().get(0).getDefaultGateway());
          assertTrue(virtualNetwork1.getNetworkIpam().get(0).getAttr().getIpamSubnets().get(0).getEnableDhcp());
          assertEquals("10.0.0.253",
              virtualNetwork1.getNetworkIpam().get(0).getAttr().getIpamSubnets().get(0).getDnsServerAddress());
          assertTrue(virtualNetwork1.getNetworkIpam().get(0).getAttr().getIpamSubnets().get(0).getAddrFromStart());
          assertEquals("10.0.0.10", virtualNetwork1.getNetworkIpam()
              .get(0)
              .getAttr()
              .getIpamSubnets()
              .get(0)
              .getAllocationPools()
              .get(0)
              .getStart());
          assertEquals("10.0.0.20", virtualNetwork1.getNetworkIpam()
              .get(0)
              .getAttr()
              .getIpamSubnets()
              .get(0)
              .getAllocationPools()
              .get(0)
              .getEnd());
          assertEquals("subnetName",
              virtualNetwork1.getNetworkIpam().get(0).getAttr().getIpamSubnets().get(0).getSubnetName());
      }
  
      @Test
      public void removeTungstenNetworkSubnetCommandTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "192.168.100.0", 23, "192.168.100.1", false, null, null, null, false, false, "subnetName1");
  
          logger.debug("Check if network ipam subnet was added to network in Tungsten-Fabric");
          assertTrue(tungstenApi.addTungstenNetworkSubnetCommand(tungstenNetworkUuid, "10.0.0.0", 24, "10.0.0.1", true,
              "10.0.0.253", "10.0.0.10", "10.0.0.20", true, "subnetName2"));
          VirtualNetwork virtualNetwork1 = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertEquals(2, virtualNetwork1.getNetworkIpam().get(0).getAttr().getIpamSubnets().size());
  
          logger.debug("Check if network ipam subnet was removed to network in Tungsten-Fabric");
          assertTrue(tungstenApi.removeTungstenNetworkSubnetCommand(tungstenNetworkUuid, "subnetName2"));
          VirtualNetwork virtualNetwork2 = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertEquals(1, virtualNetwork2.getNetworkIpam().get(0).getAttr().getIpamSubnets().size());
      }
  
      @Test
      public void createTungstenTagTypeTest() {
          logger.debug("Check if tag type is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObject(TagType.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Create tag type in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenTagType("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype"));
  
          logger.debug("Check if tag type was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObject(TagType.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
      }
  
      @Test
      public void createTungstenTagTest() {
          logger.debug("Check if tag is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObject(Tag.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Create tag in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenTag("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype", "tagvalue", "123"));
  
          logger.debug("Check if tag was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObject(Tag.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
      }
  
      @Test
      public void createTungstenApplicationPolicySetTest() {
          logger.debug("Check if application policy set is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObject(ApplicationPolicySet.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Create application policy set in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenApplicationPolicySet("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "applicationpolicyset"));
  
          logger.debug("Check if application policy set was created in Tungsten-Fabric");
          assertNotNull(
              tungstenApi.getTungstenObject(ApplicationPolicySet.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
      }
  
      @Test
      public void createTungstenFirewallPolicyTest() {
          logger.debug("Create application policy set in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenApplicationPolicySet("f5ba12c8-d4c5-4c20-a57d-67a9b6fca652",
              "applicationpolicyset"));
  
          logger.debug("Check if firewall policy is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObject(FirewallPolicy.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Create firewall policy in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenFirewallPolicy("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "firewallpolicy", 1));
  
          logger.debug("Check if firewall policy was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObject(FirewallPolicy.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
      }
  
      @Test
      public void createTungstenFirewallRuleTest() {
          logger.debug("Create application policy set in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenApplicationPolicySet("f5ba12c8-d4c5-4c20-a57d-67a9b6fca652",
              "applicationpolicyset"));
  
          logger.debug("Create firewall policy in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenFirewallPolicy("1ab1b179-8c6c-492a-868e-0493f4be175c",
              "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "firewallpolicy", 1));
  
          logger.debug("Check if firewall rule is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObject(FirewallRule.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Create service group in Tungsten-Fabric");
          tungstenApi.createTungstenServiceGroup("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4", "servicegroup", "tcp", 80, 90);
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe", "tagtype1", "tagvalue1", "123");
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("7d5575eb-d029-467e-8b78-6056a8c94a71", "tagtype2", "tagvalue2", "123");
  
          logger.debug("Create address group in Tungsten-Fabric");
          tungstenApi.createTungstenAddressGroup("88729834-3ebd-413a-adf9-40aff73cf638", "addressgroup1", "10.0.0.0", 24);
  
          logger.debug("Create address group in Tungsten-Fabric");
          tungstenApi.createTungstenAddressGroup("9291ae28-56cf-448c-b848-f2334b3c86da", "addressgroup2", "10.0.0.0", 24);
  
          logger.debug("Create tag type in Tungsten-Fabric");
          tungstenApi.createTungstenTagType("c1680d93-2614-4f99-a8c5-d4f11b3dfc9d", "tagtype");
  
          logger.debug("Create firewall rule in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenFirewallRule("124d0792-e890-4b7e-8fe8-1b7a6d63c66a",
              "1ab1b179-8c6c-492a-868e-0493f4be175c", "firewallrule", "pass", "baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe", "88729834-3ebd-413a-adf9-40aff73cf638", null, ">",
              "7d5575eb-d029-467e-8b78-6056a8c94a71", "9291ae28-56cf-448c-b848-f2334b3c86da",
              null, "c1680d93-2614-4f99-a8c5-d4f11b3dfc9d", 1));
  
          logger.debug("Check if firewall rule was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObject(FirewallRule.class, "124d0792-e890-4b7e-8fe8-1b7a6d63c66a"));
      }
  
      @Test
      public void createTungstenServiceGroupTest() {
          logger.debug("Check if service group is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObject(ServiceGroup.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Create service group in Tungsten-Fabric");
          assertNotNull(
              tungstenApi.createTungstenServiceGroup("005f0dea-0196-11ec-a1ed-b42e99f6e187", "servicegroup", "tcp", 80,
                  90));
  
          logger.debug("Check if service group was created in Tungsten-Fabric");
          ServiceGroup serviceGroup = (ServiceGroup) tungstenApi.getTungstenObject(ServiceGroup.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertNotNull(serviceGroup);
          assertEquals("tcp", serviceGroup.getFirewallServiceList().getFirewallService().get(0).getProtocol());
          assertEquals(Integer.valueOf(80),
              serviceGroup.getFirewallServiceList().getFirewallService().get(0).getDstPorts().getStartPort());
          assertEquals(Integer.valueOf(90),
              serviceGroup.getFirewallServiceList().getFirewallService().get(0).getDstPorts().getEndPort());
      }
  
      @Test
      public void createTungstenAddressGroupTest() {
          logger.debug("Check if address group is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObject(AddressGroup.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Create address group in Tungsten-Fabric");
          assertNotNull(
              tungstenApi.createTungstenAddressGroup("005f0dea-0196-11ec-a1ed-b42e99f6e187", "addressgroup", "10.0.0.0",
                  24));
  
          logger.debug("Check if address group was created in Tungsten-Fabric");
          AddressGroup addressGroup = (AddressGroup) tungstenApi.getTungstenObject(AddressGroup.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertNotNull(addressGroup);
          assertEquals("10.0.0.0", addressGroup.getPrefix().getSubnet().get(0).getIpPrefix());
          assertEquals(Integer.valueOf(24), addressGroup.getPrefix().getSubnet().get(0).getIpPrefixLen());
      }
  
      @Test
      public void applyTungstenNetworkTagTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          VirtualNetwork virtualNetwork = tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName,
              tungstenNetworkName, projectUuid, true, false, null, 0, null, false, null, null, null, false, false, null);
  
          logger.debug("Check if tag is not apply to network in Tungsten-Fabric");
          assertNull(virtualNetwork.getTag());
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype", "tagvalue", "123");
  
          logger.debug("Check if tag was applied to network in Tungsten-Fabric");
          assertTrue(tungstenApi.applyTungstenNetworkTag(List.of(tungstenNetworkUuid),
              "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
          VirtualNetwork virtualNetwork1 = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertEquals("005f0dea-0196-11ec-a1ed-b42e99f6e187", virtualNetwork1.getTag().get(0).getUuid());
      }
  
      @Test
      public void applyTungstenVmTagTest() {
          logger.debug("Create vm in Tungsten-Fabric");
          VirtualMachine virtualMachine = tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Check if tag is not apply to vm in Tungsten-Fabric");
          assertNull(virtualMachine.getTag());
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype", "tagvalue", "123");
  
          logger.debug("Check if tag was applied to vm in Tungsten-Fabric");
          assertTrue(
              tungstenApi.applyTungstenVmTag(List.of(tungstenVmUuid), "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
          VirtualMachine virtualMachine1 = (VirtualMachine) tungstenApi.getTungstenObject(VirtualMachine.class,
              tungstenVmUuid);
          assertEquals("005f0dea-0196-11ec-a1ed-b42e99f6e187", virtualMachine1.getTag().get(0).getUuid());
      }
  
      @Test
      public void applyTungstenNicTagTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create vm in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Creating a vmi in Tungsten-Fabric.");
          VirtualMachineInterface virtualMachineInterface = tungstenApi.createTungstenVmInterface(vmiUuid, vmiName,
              "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid, projectUuid, "10.0.0.1", true);
  
          logger.debug("Check if tag is not apply to vmi in Tungsten-Fabric");
          assertNull(virtualMachineInterface.getTag());
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype", "tagvalue", "123");
  
          logger.debug("Check if tag was applied to vmi in Tungsten-Fabric");
          assertTrue(tungstenApi.applyTungstenNicTag(List.of(vmiUuid), "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
          VirtualMachineInterface virtualMachineInterface1 = (VirtualMachineInterface) tungstenApi.getTungstenObject(
              VirtualMachineInterface.class, vmiUuid);
          assertEquals("005f0dea-0196-11ec-a1ed-b42e99f6e187", virtualMachineInterface1.getTag().get(0).getUuid());
      }
  
      @Test
      public void applyTungstenPolicyTagTest() {
          logger.debug("Create a network policy in Tungsten-Fabric.");
          List<TungstenRule> tungstenRuleList1 = new ArrayList<>();
          NetworkPolicy networkPolicy = (NetworkPolicy) tungstenApi.createOrUpdateTungstenNetworkPolicy("policy",
              projectUuid, tungstenRuleList1);
  
          logger.debug("Check if tag is not apply to network policy in Tungsten-Fabric");
          assertNull(networkPolicy.getTag());
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype", "tagvalue", "123");
  
          logger.debug("Check if tag was applied to network policy in Tungsten-Fabric");
          assertTrue(tungstenApi.applyTungstenPolicyTag(networkPolicy.getUuid(), "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
          NetworkPolicy networkPolicy1 = (NetworkPolicy) tungstenApi.getTungstenObjectByName(NetworkPolicy.class,
              project.getQualifiedName(), "policy");
          assertEquals("005f0dea-0196-11ec-a1ed-b42e99f6e187", networkPolicy1.getTag().get(0).getUuid());
      }
  
      @Test
      public void removeTungstenTagTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create vm in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Creating a vmi in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
          logger.debug("Create a network policy in Tungsten-Fabric.");
  
          logger.debug("Create a network policy in Tungsten-Fabric.");
          List<TungstenRule> tungstenRuleList1 = new ArrayList<>();
          NetworkPolicy networkPolicy = (NetworkPolicy) tungstenApi.createOrUpdateTungstenNetworkPolicy("policy",
              projectUuid, tungstenRuleList1);
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype", "tagvalue", "123");
  
          logger.debug("Apply tag to network in Tungsten-Fabric");
          tungstenApi.applyTungstenNetworkTag(List.of(tungstenNetworkUuid), "005f0dea-0196-11ec-a1ed-b42e99f6e187");
  
          logger.debug("Check if tag was applied to network in Tungsten-Fabric");
          VirtualNetwork virtualNetwork = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertEquals(1, virtualNetwork.getTag().size());
  
          logger.debug("Apply tag to vm in Tungsten-Fabric");
          tungstenApi.applyTungstenVmTag(List.of(tungstenVmUuid), "005f0dea-0196-11ec-a1ed-b42e99f6e187");
  
          logger.debug("Check if tag was applied to vm in Tungsten-Fabric");
          VirtualMachine virtualMachine = (VirtualMachine) tungstenApi.getTungstenObject(VirtualMachine.class,
              tungstenVmUuid);
          assertEquals(1, virtualMachine.getTag().size());
  
          logger.debug("Apply tag to nic in Tungsten-Fabric");
          tungstenApi.applyTungstenNicTag(List.of(vmiUuid), "005f0dea-0196-11ec-a1ed-b42e99f6e187");
  
          logger.debug("Check if tag was applied to nic in Tungsten-Fabric");
          VirtualMachineInterface virtualMachineInterface = (VirtualMachineInterface) tungstenApi.getTungstenObject(
              VirtualMachineInterface.class, vmiUuid);
          assertEquals(1, virtualMachineInterface.getTag().size());
  
          logger.debug("Apply tag to policy in Tungsten-Fabric");
          tungstenApi.applyTungstenPolicyTag(networkPolicy.getUuid(), "005f0dea-0196-11ec-a1ed-b42e99f6e187");
  
          logger.debug("Check if tag was applied to policy in Tungsten-Fabric");
          NetworkPolicy networkPolicy1 = (NetworkPolicy) tungstenApi.getTungstenObject(NetworkPolicy.class,
              networkPolicy.getUuid());
          assertEquals(1, networkPolicy1.getTag().size());
  
          logger.debug("remove tag from network, vm, nic, policy in Tungsten-Fabric");
          assertNotNull(tungstenApi.removeTungstenTag(List.of(tungstenNetworkUuid), List.of(tungstenVmUuid),
                  List.of(vmiUuid), networkPolicy.getUuid(), null, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Check if tag was removed from network in Tungsten-Fabric");
          VirtualNetwork virtualNetwork1 = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertEquals(0, virtualNetwork1.getTag().size());
  
          logger.debug("Check if tag was removed from vm in Tungsten-Fabric");
          VirtualMachine virtualMachine1 = (VirtualMachine) tungstenApi.getTungstenObject(VirtualMachine.class,
              tungstenVmUuid);
          assertEquals(0, virtualMachine1.getTag().size());
  
          logger.debug("Check if tag was removed from nic in Tungsten-Fabric");
          VirtualMachineInterface virtualMachineInterface1 = (VirtualMachineInterface) tungstenApi.getTungstenObject(
              VirtualMachineInterface.class, vmiUuid);
          assertEquals(0, virtualMachineInterface1.getTag().size());
  
          logger.debug("Check if tag was removed from policy in Tungsten-Fabric");
          NetworkPolicy networkPolicy2 = (NetworkPolicy) tungstenApi.getTungstenObject(NetworkPolicy.class,
              networkPolicy.getUuid());
          assertEquals(0, networkPolicy2.getTag().size());
      }
  
      @Test
      public void removeTungstenPolicyTest() {
          logger.debug("Create a virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Prepare network policy rule");
          List<TungstenRule> tungstenRuleList = new ArrayList<>();
  
          logger.debug("Create a network policy in Tungsten-Fabric.");
          NetworkPolicy networkPolicy = (NetworkPolicy) tungstenApi.createOrUpdateTungstenNetworkPolicy("policy",
              projectUuid, tungstenRuleList);
  
          logger.debug("Apply network policy to network in Tungsten-Fabric.");
          tungstenApi.applyTungstenNetworkPolicy(networkPolicy.getUuid(), tungstenNetworkUuid, 1, 1);
  
          logger.debug("Check if network policy was applied in Tungsten-Fabric.");
          VirtualNetwork virtualNetwork = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertEquals(1, virtualNetwork.getNetworkPolicy().size());
  
          logger.debug("Apply network policy to network in Tungsten-Fabric.");
          tungstenApi.removeTungstenPolicy(tungstenNetworkUuid, networkPolicy.getUuid());
  
          logger.debug("Check if network policy was applied in Tungsten-Fabric.");
          VirtualNetwork virtualNetwork1 = (VirtualNetwork) tungstenApi.getTungstenObject(VirtualNetwork.class,
              tungstenNetworkUuid);
          assertEquals(0, virtualNetwork1.getNetworkPolicy().size());
      }
  
      @Test
      public void createTungstenPolicyTest() {
          logger.debug("Check if policy is not exist in Tungsten-Fabric");
          assertNull(tungstenApi.getTungstenObject(NetworkPolicy.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Create policy in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenPolicy("005f0dea-0196-11ec-a1ed-b42e99f6e187", "policy", projectUuid));
  
          logger.debug("Check if policy was created in Tungsten-Fabric");
          assertNotNull(tungstenApi.getTungstenObject(NetworkPolicy.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
      }
  
      @Test
      public void addTungstenPolicyRuleTest() {
          logger.debug("Create policy in Tungsten-Fabric");
          NetworkPolicy networkPolicy = (NetworkPolicy) tungstenApi.createTungstenPolicy(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "policy", projectUuid);
  
          logger.debug("Check if policy was created in Tungsten-Fabric");
          assertNull(networkPolicy.getEntries());
  
          logger.debug("Check if policy rule was added in Tungsten-Fabric");
          assertNotNull(tungstenApi.addTungstenPolicyRule("c1680d93-2614-4f99-a8c5-d4f11b3dfc9d",
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "pass", "tcp", ">", "network1", "192.168.100.0", 24, 8080, 8081,
              "network2", "10.0.0.0", 16, 80, 81));
          NetworkPolicy networkPolicy1 = (NetworkPolicy) tungstenApi.getTungstenObject(NetworkPolicy.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals("pass", networkPolicy1.getEntries().getPolicyRule().get(0).getActionList().getSimpleAction());
          assertEquals("tcp", networkPolicy1.getEntries().getPolicyRule().get(0).getProtocol());
          assertEquals(">", networkPolicy1.getEntries().getPolicyRule().get(0).getDirection());
          assertEquals("network1",
              networkPolicy1.getEntries().getPolicyRule().get(0).getSrcAddresses().get(0).getVirtualNetwork());
          assertEquals("192.168.100.0", networkPolicy1.getEntries()
              .getPolicyRule()
              .get(0)
              .getSrcAddresses()
              .get(0)
              .getSubnetList()
              .get(0)
              .getIpPrefix());
          assertEquals(Integer.valueOf(24), networkPolicy1.getEntries()
              .getPolicyRule()
              .get(0)
              .getSrcAddresses()
              .get(0)
              .getSubnetList()
              .get(0)
              .getIpPrefixLen());
          assertEquals(Integer.valueOf(8080),
              networkPolicy1.getEntries().getPolicyRule().get(0).getSrcPorts().get(0).getStartPort());
          assertEquals(Integer.valueOf(8081),
              networkPolicy1.getEntries().getPolicyRule().get(0).getSrcPorts().get(0).getEndPort());
          assertEquals("network2",
              networkPolicy1.getEntries().getPolicyRule().get(0).getDstAddresses().get(0).getVirtualNetwork());
          assertEquals("10.0.0.0", networkPolicy1.getEntries()
              .getPolicyRule()
              .get(0)
              .getDstAddresses()
              .get(0)
              .getSubnetList()
              .get(0)
              .getIpPrefix());
          assertEquals(Integer.valueOf(16), networkPolicy1.getEntries()
              .getPolicyRule()
              .get(0)
              .getDstAddresses()
              .get(0)
              .getSubnetList()
              .get(0)
              .getIpPrefixLen());
          assertEquals(Integer.valueOf(80),
              networkPolicy1.getEntries().getPolicyRule().get(0).getDstPorts().get(0).getStartPort());
          assertEquals(Integer.valueOf(81),
              networkPolicy1.getEntries().getPolicyRule().get(0).getDstPorts().get(0).getEndPort());
      }
  
      @Test
      public void listTungstenAddressPolicyTest() {
          logger.debug("Create policy in Tungsten-Fabric");
          ApiObjectBase networkPolicy1 = tungstenApi.createTungstenPolicy("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "policy1", projectUuid);
  
          logger.debug("Check if network policy was listed in Tungsten-Fabric");
          List<? extends ApiObjectBase> networkPolicyList = tungstenApi.listTungstenAddressPolicy(projectUuid, "policy1");
          assertEquals(List.of(networkPolicy1), networkPolicyList);
      }
  
      @Test
      public void listTungstenPolicyTest() {
          logger.debug("Create policy in Tungsten-Fabric");
          ApiObjectBase apiObjectBase1 = tungstenApi.createTungstenPolicy("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "policy1", projectUuid);
          ApiObjectBase apiObjectBase2 = tungstenApi.createTungstenPolicy("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "policy2", projectUuid);
          List<? extends ApiObjectBase> policyList1 = Arrays.asList(apiObjectBase1, apiObjectBase2);
          policyList1.sort(comparator);
          List<? extends ApiObjectBase> policyList2 = List.of(apiObjectBase1);
  
          logger.debug("Check if policy was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> policyList3 = tungstenApi.listTungstenPolicy(projectUuid, null);
          policyList3.sort(comparator);
          assertEquals(policyList1, policyList3);
  
          logger.debug("Check if policy was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> policyList4 = tungstenApi.listTungstenPolicy(projectUuid,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(policyList2, policyList4);
      }
  
      @Test
      public void listTungstenNetworkTest() {
          logger.debug("Create network in Tungsten-Fabric");
          VirtualNetwork virtualNetwork1 = tungstenApi.createTungstenNetwork("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "network1", "network1", projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10",
              "10.0.0.20", false, false, "");
          VirtualNetwork virtualNetwork2 = tungstenApi.createTungstenNetwork("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "network2", "network2", projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10",
              "10.0.0.20", false, false, "");
          List<? extends ApiObjectBase> networkList1 = Arrays.asList(virtualNetwork1, virtualNetwork2);
          networkList1.sort(comparator);
          List<? extends ApiObjectBase> networkList2 = List.of(virtualNetwork1);
  
          logger.debug("Check if network was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> networkList3 = tungstenApi.listTungstenNetwork(projectUuid, null);
          networkList3.sort(comparator);
          assertEquals(networkList1, networkList3);
  
          logger.debug("Check if network policy was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> networkList4 = tungstenApi.listTungstenNetwork(projectUuid,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(networkList2, networkList4);
      }
  
      @Test
      public void listTungstenVmTest() {
          logger.debug("Create vm in Tungsten-Fabric");
          VirtualMachine vm1 = tungstenApi.createTungstenVirtualMachine("005f0dea-0196-11ec-a1ed-b42e99f6e187", "vm1");
          VirtualMachine vm2 = tungstenApi.createTungstenVirtualMachine("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4", "vm2");
          List<? extends ApiObjectBase> vmList1 = Arrays.asList(vm1, vm2);
          vmList1.sort(comparator);
          List<? extends ApiObjectBase> vmList2 = List.of(vm1);
  
          logger.debug("Check if vm was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> vmList3 = tungstenApi.listTungstenVm(projectUuid, null);
          vmList3.sort(comparator);
          assertEquals(vmList1, vmList3);
  
          logger.debug("Check if policy was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> vmList4 = tungstenApi.listTungstenVm(projectUuid,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(vmList2, vmList4);
      }
  
      @Test
      public void listTungstenNicTest() {
          logger.debug("Create network in Tungsten-Fabric");
          tungstenApi.createTungstenNetwork("005f0dea-0196-11ec-a1ed-b42e99f6e187", "network1", "network1", projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
          tungstenApi.createTungstenNetwork("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4", "network2", "network2", projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create vm in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine("7d5575eb-d029-467e-8b78-6056a8c94a71", "vm1");
          tungstenApi.createTungstenVirtualMachine("88729834-3ebd-413a-adf9-40aff73cf638", "vm2");
  
          logger.debug("Creating vmi in Tungsten-Fabric.");
          VirtualMachineInterface vmi1 = tungstenApi.createTungstenVmInterface("9291ae28-56cf-448c-b848-f2334b3c86da",
              "vmi1", "02:fc:f3:d6:83:c3", "005f0dea-0196-11ec-a1ed-b42e99f6e187", "7d5575eb-d029-467e-8b78-6056a8c94a71",
              projectUuid, "10.0.0.1", true);
          VirtualMachineInterface vmi2 = tungstenApi.createTungstenVmInterface("124d0792-e890-4b7e-8fe8-1b7a6d63c66a",
              "vmi2", "02:fc:f3:d6:83:c4", "baf714fa-80a1-454f-9c32-c4d4a6f5c5a4", "88729834-3ebd-413a-adf9-40aff73cf638",
              projectUuid, "10.0.0.1", true);
          List<? extends ApiObjectBase> vmiList1 = Arrays.asList(vmi1, vmi2);
          vmiList1.sort(comparator);
          List<? extends ApiObjectBase> vmiList2 = List.of(vmi1);
  
          logger.debug("Check if vmi was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> vmiList3 = tungstenApi.listTungstenNic(projectUuid, null);
          vmiList3.sort(comparator);
          assertEquals(vmiList1, vmiList3);
  
          logger.debug("Check if vmi was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> vmList4 = tungstenApi.listTungstenNic(projectUuid,
              "9291ae28-56cf-448c-b848-f2334b3c86da");
          assertEquals(vmiList2, vmList4);
      }
  
      @Test
      public void listTungstenTagTest() {
          logger.debug("Create tag in Tungsten-Fabric");
          ApiObjectBase apiObjectBase1 = tungstenApi.createTungstenTag("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype1",
              "tagvalue1", "123");
          ApiObjectBase apiObjectBase2 = tungstenApi.createTungstenTag("6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe", "tagtype2",
              "tagvalue2", "123");
          ApiObjectBase apiObjectBase3 = tungstenApi.createTungstenTag("7d5575eb-d029-467e-8b78-6056a8c94a71", "tagtype3",
              "tagvalue3", "123");
          ApiObjectBase apiObjectBase4 = tungstenApi.createTungstenTag("88729834-3ebd-413a-adf9-40aff73cf638", "tagtype4",
              "tagvalue4", "123");
          ApiObjectBase apiObjectBase5 = tungstenApi.createTungstenTag("105f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype5",
              "tagvalue5", "123");
          ApiObjectBase apiObjectBase6 = tungstenApi.createTungstenTag("7b062909-ba9d-4cf3-bbd3-7db93cf6b4fe", "tagtype6",
              "tagvalue6", "123");
          ApiObjectBase apiObjectBase7 = tungstenApi.createTungstenTag("8d5575eb-d029-467e-8b78-6056a8c94a71", "tagtype7",
              "tagvalue7", "123");
          ApiObjectBase apiObjectBase8 = tungstenApi.createTungstenTag("98729834-3ebd-413a-adf9-40aff73cf638", "tagtype8",
              "tagvalue8", "123");
          List<ApiObjectBase> listTag = Arrays.asList(apiObjectBase1);
          List<ApiObjectBase> listTag1 = Arrays.asList(apiObjectBase1, apiObjectBase2);
          List<ApiObjectBase> listTag2 = Arrays.asList(apiObjectBase3, apiObjectBase4);
          List<ApiObjectBase> listTag3 = Arrays.asList(apiObjectBase5, apiObjectBase6);
          List<ApiObjectBase> listTag4 = Arrays.asList(apiObjectBase7, apiObjectBase8);
          List<ApiObjectBase> listTag5 = Arrays.asList(apiObjectBase1, apiObjectBase2, apiObjectBase3,
              apiObjectBase4, apiObjectBase5, apiObjectBase6, apiObjectBase7, apiObjectBase8);
          listTag1.sort(comparator);
          listTag2.sort(comparator);
          listTag3.sort(comparator);
          listTag4.sort(comparator);
          listTag5.sort(comparator);
  
          logger.debug("Create network and apply tag in Tungsten-Fabric");
          tungstenApi.createTungstenNetwork("9291ae28-56cf-448c-b848-f2334b3c86da", "network1", "network1", projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
          tungstenApi.applyTungstenNetworkTag(List.of("9291ae28-56cf-448c-b848-f2334b3c86da"),
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          tungstenApi.applyTungstenNetworkTag(List.of("9291ae28-56cf-448c-b848-f2334b3c86da"),
              "6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe");
  
          logger.debug("Create vm and apply tag in Tungsten-Fabric");
          tungstenApi.createTungstenVirtualMachine("124d0792-e890-4b7e-8fe8-1b7a6d63c66a", "vm1");
          tungstenApi.applyTungstenVmTag(List.of("124d0792-e890-4b7e-8fe8-1b7a6d63c66a"),
              "7d5575eb-d029-467e-8b78-6056a8c94a71");
          tungstenApi.applyTungstenVmTag(List.of("124d0792-e890-4b7e-8fe8-1b7a6d63c66a"),
              "88729834-3ebd-413a-adf9-40aff73cf638");
  
          logger.debug("Creating vmi and apply tag in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface("c1680d93-2614-4f99-a8c5-d4f11b3dfc9d", "vmi1", "02:fc:f3:d6:83:c3",
              "9291ae28-56cf-448c-b848-f2334b3c86da", "124d0792-e890-4b7e-8fe8-1b7a6d63c66a", projectUuid, "10.0.0.1", true);
          tungstenApi.applyTungstenNicTag(List.of("c1680d93-2614-4f99-a8c5-d4f11b3dfc9d"),
              "105f0dea-0196-11ec-a1ed-b42e99f6e187");
          tungstenApi.applyTungstenNicTag(List.of("c1680d93-2614-4f99-a8c5-d4f11b3dfc9d"),
              "7b062909-ba9d-4cf3-bbd3-7db93cf6b4fe");
  
          logger.debug("Creating policy and apply tag in Tungsten-Fabric.");
          tungstenApi.createTungstenPolicy("205f0dea-0196-11ec-a1ed-b42e99f6e187", "policy", projectUuid);
          tungstenApi.applyTungstenPolicyTag("205f0dea-0196-11ec-a1ed-b42e99f6e187",
              "8d5575eb-d029-467e-8b78-6056a8c94a71");
          tungstenApi.applyTungstenPolicyTag("205f0dea-0196-11ec-a1ed-b42e99f6e187",
              "98729834-3ebd-413a-adf9-40aff73cf638");
  
          logger.debug("Check if tag was listed with network in Tungsten-Fabric");
          List<ApiObjectBase> listTag6 = tungstenApi.listTungstenTag("9291ae28-56cf-448c-b848-f2334b3c86da",
              null, null, null, null, null);
          listTag6.sort(comparator);
          assertEquals(listTag1, listTag6);
  
          logger.debug("Check if tag was listed with vm in Tungsten-Fabric");
          List<ApiObjectBase> listTag7 = tungstenApi.listTungstenTag(null,
              "124d0792-e890-4b7e-8fe8-1b7a6d63c66a", null, null, null
          , null);
          listTag7.sort(comparator);
          assertEquals(listTag2, listTag7);
  
          logger.debug("Check if tag was listed with nic in Tungsten-Fabric");
          List<ApiObjectBase> listTag8 = tungstenApi.listTungstenTag(null, null,
              "c1680d93-2614-4f99-a8c5-d4f11b3dfc9d", null, null,
              null);
          listTag8.sort(comparator);
          assertEquals(listTag3, listTag8);
  
          logger.debug("Check if tag was listed with policy in Tungsten-Fabric");
          List<ApiObjectBase> listTag9 = tungstenApi.listTungstenTag(null, null, null,
              "205f0dea-0196-11ec-a1ed-b42e99f6e187", null, null);
          listTag9.sort(comparator);
          assertEquals(listTag4, listTag9);
  
          logger.debug("Check if tag was listed all in Tungsten-Fabric");
          List<ApiObjectBase> listTag10 = tungstenApi.listTungstenTag(null, null, null, null, null, null);
          listTag10.sort(comparator);
          assertEquals(listTag5, listTag10);
  
          logger.debug("Check if tag was listed with uuid in Tungsten-Fabric");
          List<ApiObjectBase> listTag11 = tungstenApi.listTungstenTag(null, null, null, null,
              null, "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          listTag11.sort(comparator);
          assertEquals(listTag, listTag11);
      }
  
      @Test
      public void listTungstenTagTypeTest() {
          logger.debug("Create tag type in Tungsten-Fabric");
          ApiObjectBase tagType1 = tungstenApi.createTungstenTagType("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype1");
          ApiObjectBase tagType2 = tungstenApi.createTungstenTagType("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4", "tagtype2");
          List<? extends ApiObjectBase> tagTypeList1 = Arrays.asList(tagType1, tagType2);
          tagTypeList1.sort(comparator);
          List<? extends ApiObjectBase> tagTypeList2 = List.of(tagType1);
  
          logger.debug("Check if tag type was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> tagTypeList3 = tungstenApi.listTungstenTagType(null);
          tagTypeList3.sort(comparator);
          assertEquals(tagTypeList1, tagTypeList3);
  
          logger.debug("Check if tag type was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> tagTypeList4 = tungstenApi.listTungstenTagType(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(tagTypeList2, tagTypeList4);
      }
  
      @Test
      public void listTungstenNetworkPolicyTest() {
          logger.debug("Create network in Tungsten-Fabric");
          tungstenApi.createTungstenNetwork("005f0dea-0196-11ec-a1ed-b42e99f6e187", "network1", "network1", projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create policy in Tungsten-Fabric");
          ApiObjectBase apiObjectBase1 = tungstenApi.createTungstenPolicy("6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe",
              "policy1", projectUuid);
          ApiObjectBase apiObjectBase2 = tungstenApi.createTungstenPolicy("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "policy2", projectUuid);
          List<? extends ApiObjectBase> policyList1 = Arrays.asList(apiObjectBase1, apiObjectBase2);
          List<? extends ApiObjectBase> policyList2 = List.of(apiObjectBase1);
          policyList1.sort(comparator);
  
          logger.debug("Apply network policy to network in Tungsten-Fabric.");
          tungstenApi.applyTungstenNetworkPolicy("6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe",
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", 1, 1);
          tungstenApi.applyTungstenNetworkPolicy("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", 1, 2);
  
          logger.debug("Check if network policy was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> policyList3 = tungstenApi.listTungstenNetworkPolicy(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", null);
          assertEquals(policyList1, policyList3);
  
          logger.debug("Check if network policy was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> policyList4 = tungstenApi.listTungstenNetworkPolicy(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe");
          assertEquals(policyList2, policyList4);
      }
  
      @Test
      public void listTungstenApplicationPolicySetTest() {
          logger.debug("Create application policy set in Tungsten-Fabric");
          ApiObjectBase applicationPolicySet1 = tungstenApi.createTungstenApplicationPolicySet(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "aps1");
          ApiObjectBase applicationPolicySet2 = tungstenApi.createTungstenApplicationPolicySet(
              "baf714fa-80a1-454f-9c32-c4d4a6f5c5a4", "aps2");
          List<? extends ApiObjectBase> apsList1 = Arrays.asList(applicationPolicySet1, applicationPolicySet2);
          apsList1.sort(comparator);
          List<? extends ApiObjectBase> apsList2 = List.of(applicationPolicySet1);
  
          logger.debug("Check if application policy set was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> apsList3 = tungstenApi.listTungstenApplicationPolicySet(null);
          apsList3.sort(comparator);
          assertEquals(apsList1, apsList3);
  
          logger.debug("Check if application policy set was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> apsList4 = tungstenApi.listTungstenApplicationPolicySet(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(apsList2, apsList4);
      }
  
      @Test
      public void listTungstenFirewallPolicyTest() {
          logger.debug("Create application policy set in Tungsten-Fabric");
          tungstenApi.createTungstenApplicationPolicySet("f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "aps1");
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("7d5575eb-d029-467e-8b78-6056a8c94a71", "tagtype1", "tagvalue1", "123");
  
          logger.debug("Create firewall policy in Tungsten-Fabric");
          ApiObjectBase fwPolicy1 = tungstenApi.createTungstenFirewallPolicy("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "firewallpolicy1", 1);
          ApiObjectBase fwPolicy2 = tungstenApi.createTungstenFirewallPolicy("6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe",
              "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "firewallpolicy2", 1);
          List<? extends ApiObjectBase> fwPolicyList1 = Arrays.asList(fwPolicy1, fwPolicy2);
          fwPolicyList1.sort(comparator);
          List<? extends ApiObjectBase> fwPolicyList2 = List.of(fwPolicy1);
  
          logger.debug("Check if firewall policy set was listed all with application policy set in Tungsten-Fabric");
          List<? extends ApiObjectBase> fwPolicyList3 = tungstenApi.listTungstenFirewallPolicy(
              "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", null);
          fwPolicyList3.sort(comparator);
          assertEquals(fwPolicyList1, fwPolicyList3);
  
          logger.debug(
              "Check if firewall policy set was listed with uuid and application policy set in Tungsten-Fabric");
          List<? extends ApiObjectBase> fwPolicyList4 = tungstenApi.listTungstenFirewallPolicy(
              "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "baf714fa-80a1-454f-9c32-c4d4a6f5c5a4");
          assertEquals(fwPolicyList2, fwPolicyList4);
      }
  
      @Test
      public void listTungstenFirewallRuleTest() {
          logger.debug("Create application policy set in Tungsten-Fabric");
          tungstenApi.createTungstenApplicationPolicySet("f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "aps");
  
          logger.debug("Create firewall policy in Tungsten-Fabric");
          tungstenApi.createTungstenFirewallPolicy("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "firewallpolicy", 1);
  
          logger.debug("Create service group in Tungsten-Fabric");
          tungstenApi.createTungstenServiceGroup("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4", "servicegroup1", "tcp", 80, 90);
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe", "tagtype1", "tagvalue1", "123");
  
          logger.debug("Create tag in Tungsten-Fabric");
          tungstenApi.createTungstenTag("7d5575eb-d029-467e-8b78-6056a8c94a71", "tagtype2", "tagvalue2", "123");
  
          logger.debug("Create address group in Tungsten-Fabric");
          tungstenApi.createTungstenAddressGroup("88729834-3ebd-413a-adf9-40aff73cf638", "addressgroup1", "10.0.0.0", 24);
  
          logger.debug("Create address group in Tungsten-Fabric");
          tungstenApi.createTungstenAddressGroup("9291ae28-56cf-448c-b848-f2334b3c86da", "addressgroup2", "10.0.0.0", 24);
  
          logger.debug("Create tag type in Tungsten-Fabric");
          tungstenApi.createTungstenTagType("c1680d93-2614-4f99-a8c5-d4f11b3dfc9d", "tagtype1");
  
          logger.debug("Create firewall rule in Tungsten-Fabric");
          ApiObjectBase firewallRule1 = tungstenApi.createTungstenFirewallRule("124d0792-e890-4b7e-8fe8-1b7a6d63c66a",
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "firewallrule1", "pass", "baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe", "88729834-3ebd-413a-adf9-40aff73cf638", null, ">",
              "7d5575eb-d029-467e-8b78-6056a8c94a71", "9291ae28-56cf-448c-b848-f2334b3c86da",
              null, "c1680d93-2614-4f99-a8c5-d4f11b3dfc9d", 1);
          ApiObjectBase firewallRule2 = tungstenApi.createTungstenFirewallRule("224d0792-e890-4b7e-8fe8-1b7a6d63c66a",
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "firewallrule2", "pass", "baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe", "88729834-3ebd-413a-adf9-40aff73cf638", null, ">",
              "7d5575eb-d029-467e-8b78-6056a8c94a71", "9291ae28-56cf-448c-b848-f2334b3c86da",
              null, "c1680d93-2614-4f99-a8c5-d4f11b3dfc9d", 1);
  
          List<? extends ApiObjectBase> fwRuleList1 = Arrays.asList(firewallRule1, firewallRule2);
          fwRuleList1.sort(comparator);
          List<? extends ApiObjectBase> fwRuleList2 = List.of(firewallRule1);
  
          logger.debug("Check if firewall rule set was listed all with firewall policy in Tungsten-Fabric");
          List<? extends ApiObjectBase> fwRuleList3 = tungstenApi.listTungstenFirewallRule(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", null);
          fwRuleList3.sort(comparator);
          assertEquals(fwRuleList1, fwRuleList3);
  
          logger.debug("Check if firewall rule set was listed with uuid and firewall policy in Tungsten-Fabric");
          List<? extends ApiObjectBase> fwRuleList4 = tungstenApi.listTungstenFirewallRule(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "124d0792-e890-4b7e-8fe8-1b7a6d63c66a");
          assertEquals(fwRuleList2, fwRuleList4);
      }
  
      @Test
      public void listTungstenServiceGroupTest() {
          logger.debug("Create service group in Tungsten-Fabric");
          ApiObjectBase serviceGroup1 = tungstenApi.createTungstenServiceGroup("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "serviceGroup1", "tcp", 80, 80);
          ApiObjectBase serviceGroup2 = tungstenApi.createTungstenServiceGroup("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "serviceGroup2", "tcp", 80, 80);
          List<? extends ApiObjectBase> serviceGroupList1 = Arrays.asList(serviceGroup1, serviceGroup2);
          serviceGroupList1.sort(comparator);
          List<? extends ApiObjectBase> serviceGroupList2 = List.of(serviceGroup1);
  
          logger.debug("Check if service group was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> serviceGroupList3 = tungstenApi.listTungstenServiceGroup(null);
          serviceGroupList3.sort(comparator);
          assertEquals(serviceGroupList1, serviceGroupList3);
  
          logger.debug("Check if tag type was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> serviceGroupList4 = tungstenApi.listTungstenServiceGroup(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(serviceGroupList2, serviceGroupList4);
      }
  
      @Test
      public void listTungstenAddressGroupTest() {
          logger.debug("Create address group in Tungsten-Fabric");
          ApiObjectBase addressGroup1 = tungstenApi.createTungstenAddressGroup("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "addressGroup1", "10.0.0.0", 24);
          ApiObjectBase addressGroup2 = tungstenApi.createTungstenAddressGroup("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "addressGroup2", "10.0.0.0", 24);
          List<? extends ApiObjectBase> addressGroupList1 = Arrays.asList(addressGroup1, addressGroup2);
          addressGroupList1.sort(comparator);
          List<? extends ApiObjectBase> addressGroupList2 = List.of(addressGroup1);
  
          logger.debug("Check if service group was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> addressGroupList3 = tungstenApi.listTungstenAddressGroup(null);
          addressGroupList3.sort(comparator);
          assertEquals(addressGroupList1, addressGroupList3);
  
          logger.debug("Check if service group was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> addressGroupList4 = tungstenApi.listTungstenAddressGroup(
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(addressGroupList2, addressGroupList4);
      }
  
      @Test
      public void removeTungstenNetworkPolicyRuleTest() {
          logger.debug("Create policy in Tungsten-Fabric");
          tungstenApi.createTungstenPolicy("005f0dea-0196-11ec-a1ed-b42e99f6e187", "policy", projectUuid);
  
          logger.debug("Add policy rule in Tungsten-Fabric");
          tungstenApi.addTungstenPolicyRule("c1680d93-2614-4f99-a8c5-d4f11b3dfc9d",
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "pass", "tcp", ">", "network1", "192.168.100.0", 24, 8080, 8081,
              "network2", "10.0.0.0", 16, 80, 81);
  
          logger.debug("Check if policy rule was add to network policy in Tungsten-Fabric");
          NetworkPolicy networkPolicy1 = (NetworkPolicy) tungstenApi.getTungstenObject(NetworkPolicy.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(1, networkPolicy1.getEntries().getPolicyRule().size());
  
          logger.debug("Check if policy rule was remove from network policy in Tungsten-Fabric");
          assertNotNull(tungstenApi.removeTungstenNetworkPolicyRule("005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "c1680d93-2614-4f99-a8c5-d4f11b3dfc9d"));
          NetworkPolicy networkPolicy2 = (NetworkPolicy) tungstenApi.getTungstenObject(NetworkPolicy.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(0, networkPolicy2.getEntries().getPolicyRule().size());
      }
  
      @Test
      public void updateTungstenVrouterConfig() {
          GlobalVrouterConfig globalVrouterConfig = (GlobalVrouterConfig) tungstenApi.updateTungstenVrouterConfig("l3");
          assertEquals("l3", globalVrouterConfig.getForwardingMode());
      }
  
      @Test
      public void deleteTungstenObjectTest() {
          logger.debug("Create tag type in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenTagType("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype"));
  
          logger.debug("Check if tag type was deleted in Tungsten-Fabric");
          ApiObjectBase apiObjectBase = tungstenApi.getTungstenObject(TagType.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertTrue(tungstenApi.deleteTungstenObject(apiObjectBase));
          assertNull(tungstenApi.getTungstenObject(TagType.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
      }
  
      @Test
      public void deleteTungstenObjectWithUuidTest() {
          logger.debug("Create tag type in Tungsten-Fabric");
          assertNotNull(tungstenApi.createTungstenTagType("005f0dea-0196-11ec-a1ed-b42e99f6e187", "tagtype"));
  
          logger.debug("Check if tag type was deleted in Tungsten-Fabric");
          assertTrue(tungstenApi.deleteTungstenObject(TagType.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
          assertNull(tungstenApi.getTungstenObject(TagType.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
      }
  
      @Test
      public void getTungstenListObjectTest() {
          logger.debug("Create network in Tungsten-Fabric");
          VirtualNetwork network1 = tungstenApi.createTungstenNetwork("005f0dea-0196-11ec-a1ed-b42e99f6e187", "network1",
              "network1", projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20",
              false, false, "");
          VirtualNetwork network2 = tungstenApi.createTungstenNetwork("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4", "network2",
              "network2", projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20",
              false, false, "");
          List<? extends ApiObjectBase> list1 = Arrays.asList(network1, network2);
          list1.sort(comparator);
          List<? extends ApiObjectBase> list2 = List.of(network1);
  
          logger.debug("Check if network was listed all in Tungsten-Fabric");
          List<? extends ApiObjectBase> list3 = tungstenApi.getTungstenListObject(VirtualNetwork.class, project, null);
          list3.sort(comparator);
          assertEquals(list1, list3);
  
          logger.debug("Check if network was listed with uuid in Tungsten-Fabric");
          List<? extends ApiObjectBase> list4 = tungstenApi.getTungstenListObject(VirtualNetwork.class, null,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(list2, list4);
      }
  
      @Test
      public void addInstanceToSecurityGroupTest() {
          String projectFqn = TungstenApi.TUNGSTEN_DEFAULT_DOMAIN + ":" + TungstenApi.TUNGSTEN_DEFAULT_PROJECT;
  
          logger.debug("Create a security group in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenSecurityGroup(tungstenSecurityGroupUuid, tungstenSecurityGroupName,
              "TungstenSecurityGroupDescription", projectFqn));
  
          logger.debug("Create virtual network in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName,
              projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false,
              ""));
  
          logger.debug("Create virtual machine in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName));
  
          logger.debug("Create virtual machine interface in Tungsten-Fabric.");
          assertNotNull(
              tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
                  projectUuid, "10.0.0.1", true));
  
          logger.debug("Check if instance have no security group in Tungsten-Fabric.");
          VirtualMachineInterface virtualMachineInterface1 = (VirtualMachineInterface) tungstenApi.getTungstenObject(
              VirtualMachineInterface.class, vmiUuid);
          assertNull(virtualMachineInterface1.getSecurityGroup());
          assertFalse(virtualMachineInterface1.getPortSecurityEnabled());
  
          logger.debug("Add instance to security group in Tungsten-Fabric.");
          tungstenApi.addInstanceToSecurityGroup(vmiUuid, List.of(tungstenSecurityGroupUuid));
  
          logger.debug("Check if instance was added to security group in Tungsten-Fabric.");
          VirtualMachineInterface virtualMachineInterface2 = (VirtualMachineInterface) tungstenApi.getTungstenObject(
              VirtualMachineInterface.class, vmiUuid);
          assertEquals(1, virtualMachineInterface2.getSecurityGroup().size());
          assertEquals(tungstenSecurityGroupUuid, virtualMachineInterface2.getSecurityGroup().get(0).getUuid());
          assertTrue(virtualMachineInterface2.getPortSecurityEnabled());
      }
  
      @Test
      public void removeInstanceFromSecurityGroupTest() {
          String projectFqn = TungstenApi.TUNGSTEN_DEFAULT_DOMAIN + ":" + TungstenApi.TUNGSTEN_DEFAULT_PROJECT;
  
          logger.debug("Create a security group in Tungsten-Fabric.");
          tungstenApi.createTungstenSecurityGroup(tungstenSecurityGroupUuid, tungstenSecurityGroupName,
              "TungstenSecurityGroupDescription", projectFqn);
  
          logger.debug("Create virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create virtual machine in Tungsten-Fabric.");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Create virtual machine interface in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Add instance to security group in Tungsten-Fabric.");
          tungstenApi.addInstanceToSecurityGroup(vmiUuid, List.of(tungstenSecurityGroupUuid));
  
          logger.debug("Check if instance was added to security group in Tungsten-Fabric.");
          VirtualMachineInterface virtualMachineInterface1 = (VirtualMachineInterface) tungstenApi.getTungstenObject(
              VirtualMachineInterface.class, vmiUuid);
          assertEquals(1, virtualMachineInterface1.getSecurityGroup().size());
  
          logger.debug("Remove instance from security group in Tungsten-Fabric.");
          assertTrue(tungstenApi.removeInstanceFromSecurityGroup(vmiUuid, List.of(tungstenSecurityGroupUuid)));
  
          logger.debug("Check if instance was removed from security group in Tungsten-Fabric.");
          VirtualMachineInterface virtualMachineInterface2 = (VirtualMachineInterface) tungstenApi.getTungstenObject(
              VirtualMachineInterface.class, vmiUuid);
          assertEquals(0, virtualMachineInterface2.getSecurityGroup().size());
          assertFalse(virtualMachineInterface2.getPortSecurityEnabled());
      }
  
      @Test
      public void addSecondaryIpAddressTest() {
          logger.debug("Create virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create virtual machine in Tungsten-Fabric.");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Create virtual machine interface in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Check if secondary ip address was not exist in Tungsten-Fabric.");
          assertNull(tungstenApi.getTungstenObjectByName(InstanceIp.class, null, "secondaryip"));
  
          logger.debug("Check if secondary ip address was added to nic in Tungsten-Fabric.");
          assertTrue(tungstenApi.addSecondaryIpAddress(tungstenNetworkUuid, vmiUuid, "secondaryip1", "10.0.0.100"));
          InstanceIp instanceIp2 = (InstanceIp) tungstenApi.getTungstenObjectByName(InstanceIp.class, null,
              "secondaryip1");
          assertEquals("10.0.0.100", instanceIp2.getAddress());
          assertEquals(tungstenNetworkUuid, instanceIp2.getVirtualNetwork().get(0).getUuid());
          assertEquals(vmiUuid, instanceIp2.getVirtualMachineInterface().get(0).getUuid());
          assertTrue(instanceIp2.getSecondary());
  
          logger.debug("Check if secondary ip address with ip v6 was added to nic in Tungsten-Fabric.");
          assertTrue(tungstenApi.addSecondaryIpAddress(tungstenNetworkUuid, vmiUuid, "secondaryip2", "fd00::100"));
          InstanceIp instanceIp3 = (InstanceIp) tungstenApi.getTungstenObjectByName(InstanceIp.class, null,
              "secondaryip2");
          assertEquals("fd00::100", instanceIp3.getAddress());
          assertEquals("v6", instanceIp3.getFamily());
      }
  
      @Test
      public void removeSecondaryIpAddressTest() {
          logger.debug("Create virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create virtual machine in Tungsten-Fabric.");
          tungstenApi.createTungstenVirtualMachine(tungstenVmUuid, tungstenVmName);
  
          logger.debug("Create virtual machine interface in Tungsten-Fabric.");
          tungstenApi.createTungstenVmInterface(vmiUuid, vmiName, "02:fc:f3:d6:83:c3", tungstenNetworkUuid, tungstenVmUuid,
              projectUuid, "10.0.0.1", true);
  
          logger.debug("Check if secondary ip address was added to nic in Tungsten-Fabric.");
          assertTrue(tungstenApi.addSecondaryIpAddress(tungstenNetworkUuid, vmiUuid, "secondaryip", "10.0.0.100"));
          assertNotNull(tungstenApi.getTungstenObjectByName(InstanceIp.class, null, "secondaryip"));
  
          logger.debug("Check if secondary ip address was removed from nic in Tungsten-Fabric.");
          assertTrue(tungstenApi.removeSecondaryIpAddress("secondaryip"));
          assertNull(tungstenApi.getTungstenObjectByName(InstanceIp.class, null, "secondaryip"));
      }
  
      @Test
      public void createRoutingLogicalRouterTest() {
          logger.debug("Check if logical router was not exist in Tungsten-Fabric.");
          assertNull(tungstenApi.getTungstenObject(LogicalRouter.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
  
          logger.debug("Check if logical router was created in Tungsten-Fabric.");
          assertNotNull(tungstenApi.createRoutingLogicalRouter(projectUuid, "005f0dea-0196-11ec-a1ed-b42e99f6e187",
              "TungstenLogicalRouter"));
          assertNotNull(tungstenApi.getTungstenObject(LogicalRouter.class, "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
      }
  
      @Test
      public void listRoutingLogicalRouterTest() {
          logger.debug("Create logical router in Tungsten-Fabric.");
          ApiObjectBase apiObjectBase1 = tungstenApi.createRoutingLogicalRouter(projectUuid,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "logicalRouter1");
          ApiObjectBase apiObjectBase2 = tungstenApi.createRoutingLogicalRouter(projectUuid,
              "baf714fa-80a1-454f-9c32-c4d4a6f5c5a4", "logicalRouter2");
          List<? extends ApiObjectBase> list1 = Arrays.asList(apiObjectBase1, apiObjectBase2);
          list1.sort(comparator);
          List<? extends ApiObjectBase> list2 = List.of(apiObjectBase1);
  
          logger.debug("Check if logical router was listed all in Tungsten-Fabric.");
          List<? extends ApiObjectBase> list3 = tungstenApi.listRoutingLogicalRouter(null);
          list3.sort(comparator);
          assertEquals(list1, list3);
          List<? extends ApiObjectBase> list4 = tungstenApi.listRoutingLogicalRouter("005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(list2, list4);
      }
  
      @Test
      public void addNetworkGatewayToLogicalRouterTest() {
          logger.debug("Create virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              false, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create logical router in Tungsten-Fabric.");
          tungstenApi.createRoutingLogicalRouter(projectUuid, "005f0dea-0196-11ec-a1ed-b42e99f6e187", "logicalRouter1");
  
          logger.debug("Check if logical router have no network gateway in Tungsten-Fabric.");
          LogicalRouter logicalRouter1 = (LogicalRouter) tungstenApi.getTungstenObject(LogicalRouter.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertNull(logicalRouter1.getVirtualMachineInterface());
  
          logger.debug("Check if network gateway was added to logical router in Tungsten-Fabric.");
          assertNotNull(
              tungstenApi.addNetworkGatewayToLogicalRouter(tungstenNetworkUuid, "005f0dea-0196-11ec-a1ed-b42e99f6e187",
                  "192.168.100.100"));
          LogicalRouter logicalRouter2 = (LogicalRouter) tungstenApi.getTungstenObject(LogicalRouter.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(1, logicalRouter2.getVirtualMachineInterface().size());
      }
  
      @Test
      public void removeNetworkGatewayFromLogicalRouterTest() {
          logger.debug("Create virtual network in Tungsten-Fabric.");
          tungstenApi.createTungstenNetwork(tungstenNetworkUuid, tungstenNetworkName, tungstenNetworkName, projectUuid,
              false, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10", "10.0.0.20", false, false, "");
  
          logger.debug("Create logical router in Tungsten-Fabric.");
          tungstenApi.createRoutingLogicalRouter(projectUuid, "005f0dea-0196-11ec-a1ed-b42e99f6e187", "logicalRouter1");
  
          logger.debug("Check if network gateway was added to logical router in Tungsten-Fabric.");
          assertNotNull(
              tungstenApi.addNetworkGatewayToLogicalRouter(tungstenNetworkUuid, "005f0dea-0196-11ec-a1ed-b42e99f6e187",
                  "192.168.100.100"));
          LogicalRouter logicalRouter1 = (LogicalRouter) tungstenApi.getTungstenObject(LogicalRouter.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(1, logicalRouter1.getVirtualMachineInterface().size());
  
          logger.debug("Check if network gateway was removed from logical router in Tungsten-Fabric.");
          assertNotNull(tungstenApi.removeNetworkGatewayFromLogicalRouter(tungstenNetworkUuid,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187"));
          LogicalRouter logicalRouter2 = (LogicalRouter) tungstenApi.getTungstenObject(LogicalRouter.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          assertEquals(0, logicalRouter2.getVirtualMachineInterface().size());
      }
  
      @Test
      public void listConnectedNetworkFromLogicalRouterTest() {
          logger.debug("Create network in Tungsten-Fabric");
          VirtualNetwork virtualNetwork1 = tungstenApi.createTungstenNetwork("6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe",
              "network1", "network1", projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10",
              "10.0.0.20", false, false, "");
          VirtualNetwork virtualNetwork2 = tungstenApi.createTungstenNetwork("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "network2", "network2", projectUuid, true, false, "10.0.0.0", 24, "10.0.0.1", true, null, "10.0.0.10",
              "10.0.0.20", false, false, "");
          List<? extends ApiObjectBase> list1 = Arrays.asList(virtualNetwork1, virtualNetwork2);
          list1.sort(comparator);
  
          logger.debug("Create logical router in Tungsten-Fabric.");
          tungstenApi.createRoutingLogicalRouter(projectUuid, "005f0dea-0196-11ec-a1ed-b42e99f6e187", "logicalRouter");
  
          logger.debug("Add network gateway to logical router in Tungsten-Fabric.");
          tungstenApi.addNetworkGatewayToLogicalRouter("6b062909-ba9d-4cf3-bbd3-7db93cf6b4fe",
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "192.168.100.100");
          tungstenApi.addNetworkGatewayToLogicalRouter("baf714fa-80a1-454f-9c32-c4d4a6f5c5a4",
              "005f0dea-0196-11ec-a1ed-b42e99f6e187", "192.168.100.101");
  
          logger.debug("Check if connected network in logical router was listed in Tungsten-Fabric.");
          LogicalRouter logicalRouter = (LogicalRouter) tungstenApi.getTungstenObject(LogicalRouter.class,
              "005f0dea-0196-11ec-a1ed-b42e99f6e187");
          List<? extends ApiObjectBase> list2 = tungstenApi.listConnectedNetworkFromLogicalRouter(logicalRouter);
          list2.sort(comparator);
          assertEquals(list1, list2);
      }
  }
  