mirror of
https://github.com/Telecominfraproject/wlan-cloud-opensync-controller.git
synced 2025-11-01 02:57:49 +00:00
Adding support for setting NetworkProbe stats based on syntheticClient status in AP Profile Details. Added JUnits
This commit is contained in:
@@ -27,6 +27,7 @@ import com.telecominfraproject.wlan.opensync.external.integration.models.Opensyn
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState;
|
||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbDao;
|
||||
import com.telecominfraproject.wlan.opensync.util.SslUtil;
|
||||
import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration;
|
||||
import com.vmware.ovsdb.callback.ConnectionCallback;
|
||||
import com.vmware.ovsdb.callback.MonitorCallback;
|
||||
import com.vmware.ovsdb.exception.OvsdbClientException;
|
||||
@@ -199,7 +200,10 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
|
||||
if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) {
|
||||
ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats);
|
||||
}
|
||||
|
||||
|
||||
if (((ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails()).getSyntheticClientEnabled()) {
|
||||
ovsdbDao.enableNetworkProbeForSyntheticClient(ovsdbClient);
|
||||
}
|
||||
// ovsdbDao.configureWifiInet(ovsdbClient);
|
||||
|
||||
LOG.debug("Client connect Done");
|
||||
@@ -262,6 +266,10 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface {
|
||||
if (ovsdbDao.getDeviceStatsReportingInterval(ovsdbClient) != collectionIntervalSecDeviceStats) {
|
||||
ovsdbDao.updateDeviceStatsReportingInterval(ovsdbClient, collectionIntervalSecDeviceStats);
|
||||
}
|
||||
|
||||
if (((ApNetworkConfiguration) opensyncAPConfig.getApProfile().getDetails()).getSyntheticClientEnabled()) {
|
||||
ovsdbDao.enableNetworkProbeForSyntheticClient(ovsdbClient);
|
||||
}
|
||||
|
||||
} catch (OvsdbClientException e) {
|
||||
LOG.error("Could not enable/disable table state monitors, cannot proccess config change for AP {}",
|
||||
|
||||
@@ -580,6 +580,51 @@ public class OvsdbDao {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ovsdbClient
|
||||
* @param value
|
||||
* of reporting_interval column for the stats_type=device from
|
||||
* the Wifi_Stats_Config table. If value is not provisioned then
|
||||
* return -1.
|
||||
*/
|
||||
public void enableNetworkProbeForSyntheticClient(OvsdbClient ovsdbClient) {
|
||||
LOG.debug("Enable network_probe metrics for synthetic client");
|
||||
|
||||
try {
|
||||
List<Operation> operations = new ArrayList<>();
|
||||
Map<String, Value> updateColumns = new HashMap<>();
|
||||
|
||||
updateColumns.put("reporting_interval", new Atom<>(60));
|
||||
updateColumns.put("radio_type", new Atom<>("2.4G"));
|
||||
updateColumns.put("stats_type", new Atom<>("network_probe"));
|
||||
|
||||
Row row = new Row(updateColumns);
|
||||
operations.add(new Insert(wifiStatsConfigDbTable, row));
|
||||
|
||||
CompletableFuture<OperationResult[]> fResult = ovsdbClient.transact(ovsdbName, operations);
|
||||
OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS);
|
||||
|
||||
if (LOG.isDebugEnabled()) {
|
||||
|
||||
for (OperationResult res : result) {
|
||||
|
||||
if (res instanceof ErrorResult) {
|
||||
LOG.error("Could not update {}:", wifiStatsConfigDbTable);
|
||||
LOG.error("Error: {} Details: {}",
|
||||
((ErrorResult) res).getError(), ((ErrorResult) res).getDetails());
|
||||
} else {
|
||||
LOG.debug("Updated {}:", wifiStatsConfigDbTable);
|
||||
LOG.debug("Op Result {}", res);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (OvsdbClientException | TimeoutException | ExecutionException | InterruptedException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public void performRedirect(OvsdbClient ovsdbClient, String clientCn) {
|
||||
|
||||
List<Operation> operations = new ArrayList<>();
|
||||
@@ -2696,6 +2741,7 @@ public class OvsdbDao {
|
||||
.of(thresholdMap);
|
||||
|
||||
Map<String, WifiRadioConfigInfo> radioConfigs = getProvisionedWifiRadioConfigs(ovsdbClient);
|
||||
|
||||
provisionWifiStatsConfigSurvey(getAllowedChannels(ovsdbClient), radioConfigs,
|
||||
getProvisionedWifiStatsConfigs(ovsdbClient), operations, thresholds);
|
||||
|
||||
|
||||
@@ -28,6 +28,7 @@ import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig;
|
||||
import com.telecominfraproject.wlan.opensync.ovsdb.dao.OvsdbDao;
|
||||
import com.telecominfraproject.wlan.profile.network.models.ApNetworkConfiguration;
|
||||
import com.vmware.ovsdb.callback.MonitorCallback;
|
||||
import com.vmware.ovsdb.exception.OvsdbClientException;
|
||||
import com.vmware.ovsdb.protocol.methods.MonitorRequests;
|
||||
@@ -42,9 +43,8 @@ import io.netty.handler.ssl.SslContext;
|
||||
// active profiles
|
||||
@SpringBootTest(webEnvironment = WebEnvironment.NONE, classes = OpensyncGatewayTipWlanOvsdbClientTest.class)
|
||||
@Import(value = { OpensyncGatewayTipWlanOvsdbClientTest.Config.class, TipWlanOvsdbClient.class,
|
||||
TipWlanOvsdbRedirector.class, OvsdbListenerConfig.class,
|
||||
OvsdbSessionMapInterface.class, OvsdbDao.class, OpensyncExternalIntegrationInterface.class,
|
||||
OvsdbSession.class, SslContext.class })
|
||||
TipWlanOvsdbRedirector.class, OvsdbListenerConfig.class, OvsdbSessionMapInterface.class, OvsdbDao.class,
|
||||
OpensyncExternalIntegrationInterface.class, OvsdbSession.class, SslContext.class })
|
||||
public class OpensyncGatewayTipWlanOvsdbClientTest {
|
||||
|
||||
@MockBean
|
||||
@@ -55,11 +55,10 @@ public class OpensyncGatewayTipWlanOvsdbClientTest {
|
||||
|
||||
@MockBean
|
||||
private OvsdbSessionMapInterface ovsdbSessionMapInterface;
|
||||
|
||||
|
||||
@MockBean
|
||||
private SslContext sslContext;
|
||||
|
||||
|
||||
@MockBean
|
||||
private OvsdbDao ovsdbDao;
|
||||
|
||||
@@ -81,6 +80,7 @@ public class OpensyncGatewayTipWlanOvsdbClientTest {
|
||||
.thenReturn(Mockito.mock(OvsdbSession.class, Mockito.RETURNS_DEEP_STUBS));
|
||||
Mockito.when(opensyncExternalIntegrationInterface.getApConfig(Mockito.anyString()))
|
||||
.thenReturn(Mockito.mock(OpensyncAPConfig.class, Mockito.RETURNS_DEEP_STUBS));
|
||||
|
||||
Mockito.when(ovsdbClient.monitor(Mockito.anyString(), Mockito.anyString(), Mockito.any(MonitorRequests.class),
|
||||
Mockito.any(MonitorCallback.class))).thenReturn(completableFuture);
|
||||
|
||||
@@ -115,6 +115,12 @@ public class OpensyncGatewayTipWlanOvsdbClientTest {
|
||||
Mockito.when(ovsdbSession.getOvsdbClient()).thenReturn(ovsdbClient);
|
||||
Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(ovsdbSession);
|
||||
|
||||
OpensyncAPConfig apConfig = Mockito.mock(OpensyncAPConfig.class, Mockito.RETURNS_DEEP_STUBS);
|
||||
|
||||
Mockito.when(apConfig.getApProfile().getDetails()).thenReturn(Mockito.mock(ApNetworkConfiguration.class));
|
||||
|
||||
Mockito.when(opensyncExternalIntegrationInterface.getApConfig(Mockito.anyString())).thenReturn(apConfig);
|
||||
|
||||
tipwlanOvsdbClient.processConfigChanged("Test_Client_21P10C68818122");
|
||||
|
||||
Mockito.verify(ovsdbSessionMapInterface).getSession("Test_Client_21P10C68818122");
|
||||
|
||||
@@ -3,11 +3,10 @@ package com.telecominfraproject.wlan.opensync.ovsdb.dao;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
|
||||
import java.io.BufferedWriter;
|
||||
import java.io.File;
|
||||
import java.io.FileWriter;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@@ -38,14 +37,17 @@ import com.telecominfraproject.wlan.opensync.external.integration.models.Connect
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPInetState;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPRadioState;
|
||||
import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPVIFState;
|
||||
import com.vmware.ovsdb.exception.OvsdbClientException;
|
||||
import com.vmware.ovsdb.jsonrpc.v1.util.JsonUtil;
|
||||
import com.vmware.ovsdb.protocol.methods.RowUpdate;
|
||||
import com.vmware.ovsdb.protocol.methods.TableUpdate;
|
||||
import com.vmware.ovsdb.protocol.methods.TableUpdates;
|
||||
import com.vmware.ovsdb.protocol.operation.notation.Atom;
|
||||
import com.vmware.ovsdb.protocol.operation.notation.Row;
|
||||
import com.vmware.ovsdb.protocol.operation.notation.Uuid;
|
||||
import com.vmware.ovsdb.protocol.operation.notation.Value;
|
||||
import com.vmware.ovsdb.protocol.operation.result.ErrorResult;
|
||||
import com.vmware.ovsdb.protocol.operation.result.InsertResult;
|
||||
import com.vmware.ovsdb.protocol.operation.result.OperationResult;
|
||||
import com.vmware.ovsdb.protocol.operation.result.SelectResult;
|
||||
import com.vmware.ovsdb.service.OvsdbClient;
|
||||
@@ -95,7 +97,7 @@ public class OvsdbDaoTest {
|
||||
@Mock(answer = Answers.RETURNS_MOCKS)
|
||||
OvsdbClient ovsdbClient;
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
@Mock
|
||||
CompletableFuture<OperationResult[]> futureResult;
|
||||
|
||||
@Autowired
|
||||
@@ -472,6 +474,52 @@ public class OvsdbDaoTest {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testObsdbDaoEnableNetworkProbe() throws Exception {
|
||||
|
||||
Uuid rowUuid = Uuid.of(UUID.randomUUID());
|
||||
|
||||
OperationResult[] wifiStatsConfigEnableNetworkProbe = new OperationResult[] { new InsertResult(rowUuid) };
|
||||
|
||||
Mockito.when(futureResult.get(30L, TimeUnit.SECONDS)).thenReturn(wifiStatsConfigEnableNetworkProbe);
|
||||
|
||||
Mockito.when(ovsdbClient.transact(Mockito.eq(OvsdbDao.ovsdbName), Mockito.anyList())).thenReturn(futureResult);
|
||||
|
||||
ovsdbDao.enableNetworkProbeForSyntheticClient(ovsdbClient);
|
||||
|
||||
Mockito.verify(futureResult).get(30L, TimeUnit.SECONDS);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testObsdbDaoEnableNetworkProbeError() throws Exception {
|
||||
|
||||
OperationResult[] wifiStatsConfigEnableNetworkProbeFail = new OperationResult[] { new ErrorResult(
|
||||
"constraint violation",
|
||||
"network_probe is not one of the allowed values ([capacity, client, device, essid, neighbor, quality, radio, rssi, steering, survey])") };
|
||||
|
||||
Mockito.when(futureResult.get(30L, TimeUnit.SECONDS)).thenReturn(wifiStatsConfigEnableNetworkProbeFail);
|
||||
|
||||
Mockito.when(ovsdbClient.transact(Mockito.eq(OvsdbDao.ovsdbName), Mockito.anyList())).thenReturn(futureResult);
|
||||
|
||||
ovsdbDao.enableNetworkProbeForSyntheticClient(ovsdbClient);
|
||||
|
||||
Mockito.verify(futureResult).get(30L, TimeUnit.SECONDS);
|
||||
|
||||
}
|
||||
|
||||
@Test(expected = RuntimeException.class)
|
||||
public void testObsdbDaoEnableNetworkProbeException() throws Exception {
|
||||
|
||||
Mockito.when(futureResult.get(30L, TimeUnit.SECONDS))
|
||||
.thenThrow(new OvsdbClientException("OvsdbClientException"));
|
||||
|
||||
Mockito.when(ovsdbClient.transact(Mockito.eq(OvsdbDao.ovsdbName), Mockito.anyList())).thenReturn(futureResult);
|
||||
|
||||
ovsdbDao.enableNetworkProbeForSyntheticClient(ovsdbClient);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOvsdbDaoGetOpensyncAPInetState() throws Exception {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user