You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cloudstack.apache.org by pedro-martins <gi...@git.apache.org> on 2015/11/23 15:17:36 UTC

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

GitHub user pedro-martins opened a pull request:

    https://github.com/apache/cloudstack/pull/1108

    Removed the PlannerBase class because it is does not bring contribution to ACS' code.

    Removed the PlannerBase class because it is does not bring contribution to ACS' code.
    
    We changed com.cloud.deploy.FirstFitPlanner, now it doesn’t extends the PlannerBase and implements the com.cloud.deploy.DeploymentPlanner.
    
    We also removed the method com.cloud.deploy.DeploymentPlanner.check(VirtualMachineProfile, DeploymentPlan, DeployDestination, ExcludeList) that was not used anywhere.
    
    Additionally, we removed the “_” from FirstFitPlanner's attributes name, in order to have them in a more standard way.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/rafaelweingartner/cloudstack master-lrg-cs-hackday-004

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/cloudstack/pull/1108.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #1108
    
----
commit 9eaaf439065a13477a3c65ed8f879f3b784f1dc7
Author: pedro-martins <ph...@gmail.com>
Date:   2015-11-23T14:15:05Z

    Removed the empty class 'com.cloud.deploy.PlannerBase'

----


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by rafaelweingartner <gi...@git.apache.org>.
Github user rafaelweingartner commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-161388418
  
    @bhaisaab, I assume the use of _ was introduced probably by someone that comes from a C/C++ background. IMHO that does not make much sense when coding in Java, I can dive deeper in an explanation if you like. Additionally, in most of the new codes, no one seems to be using the “_” anymore.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by wido <gi...@git.apache.org>.
Github user wido commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-160599664
  
    Code seems good, waiting for @borisroman to come up with test results


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by bhaisaab <gi...@git.apache.org>.
Github user bhaisaab commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-161353281
  
    We've used _var for global or class variables throughout the codebase, should we keep it?
    LGTM (only code review) otherwise


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by asfgit <gi...@git.apache.org>.
Github user asfgit closed the pull request at:

    https://github.com/apache/cloudstack/pull/1108


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by jburwell <gi...@git.apache.org>.
Github user jburwell commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-161877685
  
    @rafaelweingartner I agree.  The use of "_" has no place in modern Java code.  Constants should be all caps with _ separators.  Everything else should be camelCase.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by rafaelweingartner <gi...@git.apache.org>.
Github user rafaelweingartner commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-160973087
  
    @DaanHoogland problem solved with that class.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by DaanHoogland <gi...@git.apache.org>.
Github user DaanHoogland commented on a diff in the pull request:

    https://github.com/apache/cloudstack/pull/1108#discussion_r46260293
  
    --- Diff: api/src/com/cloud/deploy/DeploymentPlanner.java ---
    @@ -1,323 +1,306 @@
    -// 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 com.cloud.deploy;
    -
    -import java.io.Serializable;
    -import java.util.Collection;
    -import java.util.HashSet;
    -import java.util.Set;
    -
    -import com.cloud.dc.DataCenter;
    -import com.cloud.dc.Pod;
    -import com.cloud.exception.InsufficientCapacityException;
    -import com.cloud.exception.InsufficientServerCapacityException;
    -import com.cloud.exception.ResourceUnavailableException;
    -import com.cloud.host.Host;
    -import com.cloud.org.Cluster;
    -import com.cloud.storage.StoragePool;
    -import com.cloud.utils.component.Adapter;
    -import com.cloud.vm.VirtualMachineProfile;
    -
    -/**
    - */
    -public interface DeploymentPlanner extends Adapter {
    -
    -    /**
    -     * plan is called to determine where a virtual machine should be running.
    -     *
    -     * @param vm
    -     *            virtual machine.
    -     * @param plan
    -     *            deployment plan that tells you where it's being deployed to.
    -     * @param avoid
    -     *            avoid these data centers, pods, clusters, or hosts.
    -     * @return DeployDestination for that virtual machine.
    -     */
    -    @Deprecated
    -    DeployDestination plan(VirtualMachineProfile vm, DeploymentPlan plan, ExcludeList avoid) throws InsufficientServerCapacityException;
    -
    -    /**
    -     * check() is called right before the virtual machine starts to make sure
    -     * the host has enough capacity.
    -     *
    -     * @param vm
    -     *            virtual machine in question.
    -     * @param plan
    -     *            deployment plan used to determined the deploy destination.
    -     * @param dest
    -     *            destination returned by plan.
    -     * @param avoid
    -     *            what to avoid.
    -     * @return true if it's okay to start; false if not. If false, the exclude list will include what should be
    -     *         excluded.
    -     */
    -    boolean check(VirtualMachineProfile vm, DeploymentPlan plan, DeployDestination dest, ExcludeList exclude);
    -
    -    /**
    -     * canHandle is called before plan to determine if the plan can do the allocation. Planers should be exclusive so
    -     * planner writer must
    -     * make sure only one planer->canHandle return true in the planner list
    -     *
    -     * @param vm
    -     *            virtual machine.
    -     * @param plan
    -     *            deployment plan that tells you where it's being deployed to.
    -     * @param avoid
    -     *            avoid these data centers, pods, clusters, or hosts.
    -     * @return true if it's okay to allocate; false or not
    -     */
    -    boolean canHandle(VirtualMachineProfile vm, DeploymentPlan plan, ExcludeList avoid);
    -
    -    public enum AllocationAlgorithm {
    -        random, firstfit, userdispersing, userconcentratedpod_random, userconcentratedpod_firstfit;
    -    }
    -
    -    public enum PlannerResourceUsage {
    -        Shared, Dedicated;
    -    }
    -
    -    public static class ExcludeList implements Serializable {
    -        private static final long serialVersionUID = -482175549460148301L;
    -
    -        private Set<Long> _dcIds;
    -        private Set<Long> _podIds;
    -        private Set<Long> _clusterIds;
    -        private Set<Long> _hostIds;
    -        private Set<Long> _poolIds;
    -
    -        public ExcludeList() {
    -        }
    -
    -        public ExcludeList(Set<Long> dcIds, Set<Long> podIds, Set<Long> clusterIds, Set<Long> hostIds, Set<Long> poolIds) {
    -            if (dcIds != null) {
    -                this._dcIds = new HashSet<Long>(dcIds);
    -            }
    -            if (podIds != null) {
    -                this._podIds = new HashSet<Long>(podIds);
    -            }
    -            if (clusterIds != null) {
    -                this._clusterIds = new HashSet<Long>(clusterIds);
    -            }
    -
    -            if (hostIds != null) {
    -                this._hostIds = new HashSet<Long>(hostIds);
    -            }
    -            if (poolIds != null) {
    -                this._poolIds = new HashSet<Long>(poolIds);
    -            }
    -        }
    -
    -        public boolean add(InsufficientCapacityException e) {
    -            Class<?> scope = e.getScope();
    -
    -            if (scope == null) {
    -                return false;
    -            }
    -
    -            if (Host.class.isAssignableFrom(scope)) {
    -                addHost(e.getId());
    -            } else if (Pod.class.isAssignableFrom(scope)) {
    -                addPod(e.getId());
    -            } else if (DataCenter.class.isAssignableFrom(scope)) {
    -                addDataCenter(e.getId());
    -            } else if (Cluster.class.isAssignableFrom(scope)) {
    -                addCluster(e.getId());
    -            } else if (StoragePool.class.isAssignableFrom(scope)) {
    -                addPool(e.getId());
    -            } else {
    -                return false;
    -            }
    -
    -            return true;
    -        }
    -
    -        public boolean add(ResourceUnavailableException e) {
    -            Class<?> scope = e.getScope();
    -
    -            if (scope == null) {
    -                return false;
    -            }
    -
    -            if (Host.class.isAssignableFrom(scope)) {
    -                addHost(e.getResourceId());
    -            } else if (Pod.class.isAssignableFrom(scope)) {
    -                addPod(e.getResourceId());
    -            } else if (DataCenter.class.isAssignableFrom(scope)) {
    -                addDataCenter(e.getResourceId());
    -            } else if (Cluster.class.isAssignableFrom(scope)) {
    -                addCluster(e.getResourceId());
    -            } else if (StoragePool.class.isAssignableFrom(scope)) {
    -                addPool(e.getResourceId());
    -            } else {
    -                return false;
    -            }
    -
    -            return true;
    -        }
    -
    -        public void addPool(long poolId) {
    -            if (_poolIds == null) {
    -                _poolIds = new HashSet<Long>();
    -            }
    -            _poolIds.add(poolId);
    -        }
    -
    -
    -        public void addDataCenter(long dataCenterId) {
    -            if (_dcIds == null) {
    -                _dcIds = new HashSet<Long>();
    -            }
    -            _dcIds.add(dataCenterId);
    -        }
    -
    -        public void addPod(long podId) {
    -            if (_podIds == null) {
    -                _podIds = new HashSet<Long>();
    -            }
    -            _podIds.add(podId);
    -        }
    -
    -        public void addPodList(Collection<Long> podList) {
    -            if (_podIds == null) {
    -                _podIds = new HashSet<Long>();
    -            }
    -            _podIds.addAll(podList);
    -        }
    -
    -        public void addCluster(long clusterId) {
    -            if (_clusterIds == null) {
    -                _clusterIds = new HashSet<Long>();
    -            }
    -            _clusterIds.add(clusterId);
    -        }
    -
    -        public void addClusterList(Collection<Long> clusterList) {
    -            if (_clusterIds == null) {
    -                _clusterIds = new HashSet<Long>();
    -            }
    -            _clusterIds.addAll(clusterList);
    -        }
    -
    -        public void addHost(long hostId) {
    -            if (_hostIds == null) {
    -                _hostIds = new HashSet<Long>();
    -            }
    -            _hostIds.add(hostId);
    -        }
    -
    -        public void addHostList(Collection<Long> hostList) {
    -            if (_hostIds == null) {
    -                _hostIds = new HashSet<Long>();
    -            }
    -            _hostIds.addAll(hostList);
    -        }
    -
    -        public boolean shouldAvoid(Host host) {
    -            if (_dcIds != null && _dcIds.contains(host.getDataCenterId())) {
    -                return true;
    -            }
    -
    -            if (_podIds != null && _podIds.contains(host.getPodId())) {
    -                return true;
    -            }
    -
    -            if (_clusterIds != null && _clusterIds.contains(host.getClusterId())) {
    -                return true;
    -            }
    -
    -            if (_hostIds != null && _hostIds.contains(host.getId())) {
    -                return true;
    -            }
    -
    -            return false;
    -        }
    -
    -        public boolean shouldAvoid(Cluster cluster) {
    -            if (_dcIds != null && _dcIds.contains(cluster.getDataCenterId())) {
    -                return true;
    -            }
    -
    -            if (_podIds != null && _podIds.contains(cluster.getPodId())) {
    -                return true;
    -            }
    -
    -            if (_clusterIds != null && _clusterIds.contains(cluster.getId())) {
    -                return true;
    -            }
    -            return false;
    -        }
    -
    -        public boolean shouldAvoid(Pod pod) {
    -            if (_dcIds != null && _dcIds.contains(pod.getDataCenterId())) {
    -                return true;
    -            }
    -
    -            if (_podIds != null && _podIds.contains(pod.getId())) {
    -                return true;
    -            }
    -
    -            return false;
    -        }
    -
    -        public boolean shouldAvoid(StoragePool pool) {
    -            if (_dcIds != null && _dcIds.contains(pool.getDataCenterId())) {
    -                return true;
    -            }
    -
    -            if (_podIds != null && _podIds.contains(pool.getPodId())) {
    -                return true;
    -            }
    -
    -            if (_clusterIds != null && _clusterIds.contains(pool.getClusterId())) {
    -                return true;
    -            }
    -
    -            if (_poolIds != null && _poolIds.contains(pool.getId())) {
    -                return true;
    -            }
    -
    -            return false;
    -        }
    -
    -        public boolean shouldAvoid(DataCenter dc) {
    -            if (_dcIds != null && _dcIds.contains(dc.getId())) {
    -                return true;
    -            }
    -            return false;
    -        }
    -
    -        public Set<Long> getDataCentersToAvoid() {
    -            return _dcIds;
    -        }
    -
    -        public Set<Long> getPodsToAvoid() {
    -            return _podIds;
    -        }
    -
    -        public Set<Long> getClustersToAvoid() {
    -            return _clusterIds;
    -        }
    -
    -        public Set<Long> getHostsToAvoid() {
    -            return _hostIds;
    -        }
    -
    -        public Set<Long> getPoolsToAvoid() {
    -            return _poolIds;
    -        }
    -    }
    -}
    +// Licensed to the Apache Software Foundation (ASF) under one
    --- End diff --
    
    this class shows way more diffs than needed. please check line endings and force push.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by borisroman <gi...@git.apache.org>.
Github user borisroman commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-158981153
  
    I agree with @DaanHoogland, less is more! Thanks for your contribution. I'll run integration tests on it to show nothing breaks.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by DaanHoogland <gi...@git.apache.org>.
Github user DaanHoogland commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-158952872
  
    less is more. Are there no other types of Planner{}s then DeploymentPlanner{}s? and in addition Interfaces are a betterway to signify types if/when there is no shared code.
    
    LGTM based on the code and explenation.


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by DaanHoogland <gi...@git.apache.org>.
Github user DaanHoogland commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-161927037
  
    There is a lot of LGTM here (including mine) but did anybody do any relevant tests with this code?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by DaanHoogland <gi...@git.apache.org>.
Github user DaanHoogland commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-161117310
  
    reviewed again after update, still lgtm


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

[GitHub] cloudstack pull request: Removed the PlannerBase class because it ...

Posted by remibergsma <gi...@git.apache.org>.
Github user remibergsma commented on the pull request:

    https://github.com/apache/cloudstack/pull/1108#issuecomment-162231828
  
    LGTM based on these tests:
    
    ```
    nosetests --with-marvin --marvin-config=${marvinCfg} -s -a tags=advanced,required_hardware=true \
    component/test_vpc_redundant.py \
    component/test_routers_iptables_default_policy.py \
    component/test_routers_network_ops.py \
    component/test_vpc_router_nics.py \
    smoke/test_loadbalance.py \
    smoke/test_internal_lb.py \
    smoke/test_ssvm.py \
    smoke/test_network.py
    
    ```
    
    Result:
    
    ```
    Create a redundant VPC with two networks with two VMs in each network ... === TestName: test_01_create_redundant_VPC_2tiers_4VMs_4IPs_4PF_ACL | Status : SUCCESS ===
    ok
    Create a redundant VPC with two networks with two VMs in each network and check default routes ... === TestName: test_02_redundant_VPC_default_routes | Status : SUCCESS ===
    ok
    Create a redundant VPC with two networks with two VMs in each network ... === TestName: test_03_create_redundant_VPC_1tier_2VMs_2IPs_2PF_ACL_reboot_routers | Status : SUCCESS ===
    ok
    Test iptables default INPUT/FORWARD policy on RouterVM ... === TestName: test_02_routervm_iptables_policies | Status : SUCCESS ===
    ok
    Test iptables default INPUT/FORWARD policies on VPC router ... === TestName: test_01_single_VPC_iptables_policies | Status : SUCCESS ===
    ok
    Test redundant router internals ... === TestName: test_01_isolate_network_FW_PF_default_routes_egress_true | Status : SUCCESS ===
    ok
    Test redundant router internals ... === TestName: test_02_isolate_network_FW_PF_default_routes_egress_false | Status : SUCCESS ===
    ok
    Test redundant router internals ... === TestName: test_01_RVR_Network_FW_PF_SSH_default_routes_egress_true | Status : SUCCESS ===
    ok
    Test redundant router internals ... === TestName: test_02_RVR_Network_FW_PF_SSH_default_routes_egress_false | Status : SUCCESS ===
    ok
    Create a VPC with two networks with one VM in each network and test nics after destroy ... === TestName: test_01_VPC_nics_after_destroy | Status : SUCCESS ===
    ok
    Create a VPC with two networks with one VM in each network and test default routes ... === TestName: test_02_VPC_default_routes | Status : SUCCESS ===
    ok
    Check the password file in the Router VM ... === TestName: test_isolate_network_password_server | Status : SUCCESS ===
    ok
    Check that the /etc/dhcphosts.txt doesn't contain duplicate IPs ... === TestName: test_router_dhcphosts | Status : SUCCESS ===
    ok
    Test to create Load balancing rule with source NAT ... === TestName: test_01_create_lb_rule_src_nat | Status : SUCCESS ===
    ok
    Test to create Load balancing rule with non source NAT ... === TestName: test_02_create_lb_rule_non_nat | Status : SUCCESS ===
    ok
    Test for assign & removing load balancing rule ... === TestName: test_assign_and_removal_lb | Status : SUCCESS ===
    ok
    Test to verify access to loadbalancer haproxy admin stats page ... === TestName: test02_internallb_haproxy_stats_on_all_interfaces | Status : SUCCESS ===
    ok
    Test create, assign, remove of an Internal LB with roundrobin http traffic to 3 vm's ... === TestName: test_01_internallb_roundrobin_1VPC_3VM_HTTP_port80 | Status : SUCCESS ===
    ok
    Test SSVM Internals ... === TestName: test_03_ssvm_internals | Status : SUCCESS ===
    ok
    Test CPVM Internals ... === TestName: test_04_cpvm_internals | Status : SUCCESS ===
    ok
    Test stop SSVM ... === TestName: test_05_stop_ssvm | Status : SUCCESS ===
    ok
    Test stop CPVM ... === TestName: test_06_stop_cpvm | Status : SUCCESS ===
    ok
    Test reboot SSVM ... === TestName: test_07_reboot_ssvm | Status : SUCCESS ===
    ok
    Test reboot CPVM ... === TestName: test_08_reboot_cpvm | Status : SUCCESS ===
    ok
    Test destroy SSVM ... === TestName: test_09_destroy_ssvm | Status : SUCCESS ===
    ok
    Test destroy CPVM ... === TestName: test_10_destroy_cpvm | Status : SUCCESS ===
    ok
    Test Remote Access VPN in VPC ... === TestName: test_vpc_remote_access_vpn | Status : SUCCESS ===
    ok
    Test VPN in VPC ... === TestName: test_vpc_site2site_vpn | Status : SUCCESS ===
    ok
    Test for port forwarding on source NAT ... === TestName: test_01_port_fwd_on_src_nat | Status : SUCCESS ===
    ok
    Test for port forwarding on non source NAT ... === TestName: test_02_port_fwd_on_non_src_nat | Status : SUCCESS ===
    ok
    Test for reboot router ... === TestName: test_reboot_router | Status : SUCCESS ===
    ok
    Test for Router rules for network rules on acquired public IP ... === TestName: test_network_rules_acquired_public_ip_1_static_nat_rule | Status : SUCCESS ===
    ok
    Test for Router rules for network rules on acquired public IP ... === TestName: test_network_rules_acquired_public_ip_2_nat_rule | Status : SUCCESS ===
    ok
    Test for Router rules for network rules on acquired public IP ... === TestName: test_network_rules_acquired_public_ip_3_Load_Balancer_Rule | Status : SUCCESS ===
    ok
    
    ----------------------------------------------------------------------
    Ran 34 tests in 16908.569s
    
    OK
    ```
    
    
    And:
    
    ```
    nosetests --with-marvin --marvin-config=${marvinCfg} -s -a tags=advanced,required_hardware=false \
    smoke/test_routers.py \
    smoke/test_network_acl.py \
    smoke/test_privategw_acl.py \
    smoke/test_reset_vm_on_reboot.py \
    smoke/test_vm_life_cycle.py \
    smoke/test_vpc_vpn.py \
    smoke/test_service_offerings.py \
    component/test_vpc_offerings.py \
    component/test_vpc_routers.py
    ```
    
    Result:
    
    ```
    Test router internal advanced zone ... === TestName: test_02_router_internal_adv | Status : SUCCESS ===
    ok
    Test restart network ... === TestName: test_03_restart_network_cleanup | Status : SUCCESS ===
    ok
    Test router basic setup ... === TestName: test_05_router_basic | Status : SUCCESS ===
    ok
    Test router advanced setup ... === TestName: test_06_router_advanced | Status : SUCCESS ===
    ok
    Test stop router ... === TestName: test_07_stop_router | Status : SUCCESS ===
    ok
    Test start router ... === TestName: test_08_start_router | Status : SUCCESS ===
    ok
    Test reboot router ... === TestName: test_09_reboot_router | Status : SUCCESS ===
    ok
    test_privategw_acl (integration.smoke.test_privategw_acl.TestPrivateGwACL) ... === TestName: test_privategw_acl | Status : SUCCESS ===
    ok
    Test reset virtual machine on reboot ... === TestName: test_01_reset_vm_on_reboot | Status : SUCCESS ===
    ok
    Test advanced zone virtual router ... === TestName: test_advZoneVirtualRouter | Status : SUCCESS ===
    ok
    Test Deploy Virtual Machine ... === TestName: test_deploy_vm | Status : SUCCESS ===
    ok
    Test Multiple Deploy Virtual Machine ... === TestName: test_deploy_vm_multiple | Status : SUCCESS ===
    ok
    Test Stop Virtual Machine ... === TestName: test_01_stop_vm | Status : SUCCESS ===
    ok
    Test Start Virtual Machine ... === TestName: test_02_start_vm | Status : SUCCESS ===
    ok
    Test Reboot Virtual Machine ... === TestName: test_03_reboot_vm | Status : SUCCESS ===
    ok
    Test destroy Virtual Machine ... === TestName: test_06_destroy_vm | Status : SUCCESS ===
    ok
    Test recover Virtual Machine ... === TestName: test_07_restore_vm | Status : SUCCESS ===
    ok
    Test migrate VM ... === TestName: test_08_migrate_vm | Status : SUCCESS ===
    ok
    Test destroy(expunge) Virtual Machine ... === TestName: test_09_expunge_vm | Status : SUCCESS ===
    ok
    Test to create service offering ... === TestName: test_01_create_service_offering | Status : SUCCESS ===
    ok
    Test to update existing service offering ... === TestName: test_02_edit_service_offering | Status : SUCCESS ===
    ok
    Test to delete service offering ... === TestName: test_03_delete_service_offering | Status : SUCCESS ===
    ok
    Test for delete account ... === TestName: test_delete_account | Status : SUCCESS ===
    ok
    Test for Associate/Disassociate public IP address for admin account ... === TestName: test_public_ip_admin_account | Status : SUCCESS ===
    ok
    Test for Associate/Disassociate public IP address for user account ... === TestName: test_public_ip_user_account | Status : SUCCESS ===
    ok
    Test for release public IP address ... === TestName: test_releaseIP | Status : SUCCESS ===
    ok
    Test create VPC offering ... === TestName: test_01_create_vpc_offering | Status : SUCCESS ===
    ok
    Test VPC offering without load balancing service ... === TestName: test_03_vpc_off_without_lb | Status : SUCCESS ===
    ok
    Test VPC offering without static NAT service ... === TestName: test_04_vpc_off_without_static_nat | Status : SUCCESS ===
    ok
    Test VPC offering without port forwarding service ... === TestName: test_05_vpc_off_without_pf | Status : SUCCESS ===
    ok
    Test VPC offering with invalid services ... === TestName: test_06_vpc_off_invalid_services | Status : SUCCESS ===
    ok
    Test update VPC offering ... === TestName: test_07_update_vpc_off | Status : SUCCESS ===
    ok
    Test list VPC offering ... === TestName: test_08_list_vpc_off | Status : SUCCESS ===
    test_09_create_redundant_vpc_offering (integration.component.test_vpc_offerings.TestVPCOffering) ... === TestName: test_09_create_redundant_vpc_offering | Status : SUCCESS ===
    ok
    Test start/stop of router after addition of one guest network ... === TestName: test_01_start_stop_router_after_addition_of_one_guest_network | Status : SUCCESS ===
    ok
    Test reboot of router after addition of one guest network ... === TestName: test_02_reboot_router_after_addition_of_one_guest_network | Status : SUCCESS ===
    ok
    Test to change service offering of router after addition of one guest network ... === TestName: test_04_chg_srv_off_router_after_addition_of_one_guest_network | Status : SUCCESS ===
    ok
    Test destroy of router after addition of one guest network ... === TestName: test_05_destroy_router_after_addition_of_one_guest_network | Status : SUCCESS ===
    ok
    Test to stop and start router after creation of VPC ... === TestName: test_01_stop_start_router_after_creating_vpc | Status : SUCCESS ===
    ok
    Test to reboot the router after creating a VPC ... === TestName: test_02_reboot_router_after_creating_vpc | Status : SUCCESS ===
    ok
    Tests to change service offering of the Router after ... === TestName: test_04_change_service_offerring_vpc | Status : SUCCESS ===
    ok
    Test to destroy the router after creating a VPC ... === TestName: test_05_destroy_router_after_creating_vpc | Status : SUCCESS ===
    ok
    
    ----------------------------------------------------------------------
    Ran 42 tests in 8384.380s
    
    OK
    ```


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---