You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ch...@apache.org on 2013/01/10 00:50:01 UTC
[12/16] git commit: Network-refactor: add a method for plugins to get
the source nat ip
Network-refactor: add a method for plugins to get the source nat ip
Signed-off-by: Chiradeep Vittal <ch...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/88df984f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/88df984f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/88df984f
Branch: refs/heads/network-refactor
Commit: 88df984ff3edddaf502692b4e37bba2cc45365fa
Parents: a34ce77
Author: Chiradeep Vittal <ch...@apache.org>
Authored: Tue Jan 8 18:39:25 2013 -0800
Committer: Chiradeep Vittal <ch...@apache.org>
Committed: Wed Jan 9 15:49:02 2013 -0800
----------------------------------------------------------------------
api/src/com/cloud/network/NetworkModel.java | 2 +
server/src/com/cloud/network/NetworkModelImpl.java | 21 ++++
.../com/cloud/network/MockNetworkModelImpl.java | 9 ++
.../test/com/cloud/network/NetworkModelTest.java | 88 +++++++++++++++
4 files changed, 120 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88df984f/api/src/com/cloud/network/NetworkModel.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/network/NetworkModel.java b/api/src/com/cloud/network/NetworkModel.java
index f53cfbd..bd3acbe 100644
--- a/api/src/com/cloud/network/NetworkModel.java
+++ b/api/src/com/cloud/network/NetworkModel.java
@@ -241,5 +241,7 @@ public interface NetworkModel {
Set<Long> getAvailableIps(Network network, String requestedIp);
String getDomainNetworkDomain(long domainId, long zoneId);
+
+ PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork);
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88df984f/server/src/com/cloud/network/NetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/NetworkModelImpl.java b/server/src/com/cloud/network/NetworkModelImpl.java
index 8dee11e..dcd3c25 100644
--- a/server/src/com/cloud/network/NetworkModelImpl.java
+++ b/server/src/com/cloud/network/NetworkModelImpl.java
@@ -1833,4 +1833,25 @@ public class NetworkModelImpl implements NetworkModel, Manager{
public String getName() {
return _name;
}
+
+ @Override
+ public PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork) {
+ List<? extends IpAddress> addrs = listPublicIpsAssignedToGuestNtwk(owner.getId(), guestNetwork.getId(), true);
+
+ IPAddressVO sourceNatIp = null;
+ if (addrs.isEmpty()) {
+ return null;
+ } else {
+ for (IpAddress addr : addrs) {
+ if (addr.isSourceNat()) {
+ sourceNatIp = _ipAddressDao.findById(addr.getId());
+ return new PublicIp(sourceNatIp, _vlanDao.findById(sourceNatIp.getVlanId()),
+ NetUtils.createSequenceBasedMacAddress(sourceNatIp.getMacAddress()));
+ }
+ }
+
+ }
+
+ return null;
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88df984f/server/test/com/cloud/network/MockNetworkModelImpl.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/MockNetworkModelImpl.java b/server/test/com/cloud/network/MockNetworkModelImpl.java
index 76e7171..e1113a4 100644
--- a/server/test/com/cloud/network/MockNetworkModelImpl.java
+++ b/server/test/com/cloud/network/MockNetworkModelImpl.java
@@ -795,4 +795,13 @@ public class MockNetworkModelImpl implements NetworkModel, Manager {
return null;
}
+ /* (non-Javadoc)
+ * @see com.cloud.network.NetworkModel#getSourceNatIpAddressForGuestNetwork(com.cloud.user.Account, com.cloud.network.Network)
+ */
+ @Override
+ public PublicIpAddress getSourceNatIpAddressForGuestNetwork(Account owner, Network guestNetwork) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/88df984f/server/test/com/cloud/network/NetworkModelTest.java
----------------------------------------------------------------------
diff --git a/server/test/com/cloud/network/NetworkModelTest.java b/server/test/com/cloud/network/NetworkModelTest.java
new file mode 100644
index 0000000..52b3187
--- /dev/null
+++ b/server/test/com/cloud/network/NetworkModelTest.java
@@ -0,0 +1,88 @@
+// 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.network;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+import static org.mockito.Matchers.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import com.cloud.dc.VlanVO;
+import com.cloud.dc.dao.VlanDao;
+import com.cloud.network.dao.IPAddressDao;
+import com.cloud.user.Account;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.net.Ip;
+
+public class NetworkModelTest {
+ @Before
+ public void setUp() {
+
+ }
+
+ @Test
+ public void testGetSourceNatIpAddressForGuestNetwork() {
+ NetworkModelImpl modelImpl = new NetworkModelImpl();
+ IPAddressDao ipAddressDao = mock(IPAddressDao.class);
+ modelImpl._ipAddressDao = ipAddressDao;
+ List<IPAddressVO> fakeList = new ArrayList<IPAddressVO>();
+ IPAddressVO fakeIp = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false);
+ fakeList.add(fakeIp);
+ SearchBuilder<IPAddressVO> fakeSearch = mock(SearchBuilder.class);
+ modelImpl.IpAddressSearch = fakeSearch;
+ VlanDao fakeVlanDao = mock(VlanDao.class);
+ when (fakeVlanDao.findById(anyLong())).thenReturn(mock(VlanVO.class));
+ modelImpl._vlanDao = fakeVlanDao;
+ when(fakeSearch.create()).thenReturn(mock(SearchCriteria.class));
+ when(
+ ipAddressDao.search(
+ any(SearchCriteria.class),
+ (Filter)org.mockito.Matchers.isNull()
+ )
+ ).thenReturn(fakeList);
+ when (
+ ipAddressDao.findById(anyLong())
+ ).thenReturn(fakeIp);
+ Account fakeAccount = mock(Account.class);
+ when(fakeAccount.getId()).thenReturn(1L);
+ Network fakeNetwork = mock(Network.class);
+ when(fakeNetwork.getId()).thenReturn(1L);
+ PublicIpAddress answer = modelImpl.getSourceNatIpAddressForGuestNetwork(fakeAccount, fakeNetwork);
+ Assert.assertNull(answer);
+ IPAddressVO fakeIp2 = new IPAddressVO(new Ip("76.75.75.75"), 1, 0xaabb10ddeeffL, 10, true);
+ fakeList.add(fakeIp2);
+ when (
+ ipAddressDao.findById(anyLong())
+ ).thenReturn(fakeIp2);
+ answer = modelImpl.getSourceNatIpAddressForGuestNetwork(fakeAccount, fakeNetwork);
+ Assert.assertNotNull(answer);
+ Assert.assertEquals(answer.getAddress().addr(), "76.75.75.75");
+
+ }
+
+}