diff --git a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java index b8909be..38ad258 100644 --- a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java +++ b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OpensyncExternalIntegrationCloud.java @@ -1248,7 +1248,7 @@ public class OpensyncExternalIntegrationCloud implements OpensyncExternalIntegra currentActiveBSSIDs = new ArrayList<>(); } else { currentActiveBSSIDs = currentActiveBSSIDs.stream() - .filter(p -> (!p.getRadioType().equals(freqBand) || !p.getSsid().equals(ssid))) + .filter(p -> (p.getRadioType() != null && p.getSsid() != null)).filter(p -> !p.getRadioType().equals(freqBand) || !p.getSsid().equals(ssid)) .collect(Collectors.toList()); LOG.debug( "Processing Wifi_VIF_State table update for AP {}, activeBSSIDs bssidList without current radio freq {} and ssid {}", diff --git a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java index 9c21631..5e1a94d 100644 --- a/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java +++ b/opensync-ext-cloud/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/controller/OpensyncCloudGatewayController.java @@ -329,7 +329,9 @@ public class OpensyncCloudGatewayController { } else if (command instanceof CEGWNewChannelRequest) { CEGWNewChannelRequest request = (CEGWNewChannelRequest) command; Map newBackupChannels = request.getNewBackupChannels(); - String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels); + Map newPrimaryChannels = request.getNewPrimaryChannels(); + + String resultDetails = tipwlanOvsdbClient.processNewChannelsRequest(inventoryId, newBackupChannels,newPrimaryChannels); response.setResultDetail(resultDetails); } else if (command instanceof CEGWFirmwareDownloadRequest) { diff --git a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OvsdbClientInterface.java b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OvsdbClientInterface.java index 1aabfd2..4646dbc 100644 --- a/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OvsdbClientInterface.java +++ b/opensync-ext-interface/src/main/java/com/telecominfraproject/wlan/opensync/external/integration/OvsdbClientInterface.java @@ -32,6 +32,6 @@ public interface OvsdbClientInterface { String processFactoryResetRequest(String apId); - String processNewChannelsRequest(String apId, Map channelMap); + String processNewChannelsRequest(String apId, Map backupChannelMap, Map primaryChannelMap); } diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java index 0c9a467..1799d24 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/TipWlanOvsdbClient.java @@ -896,19 +896,19 @@ public class TipWlanOvsdbClient implements OvsdbClientInterface { return key; } - public String processNewChannelsRequest(String apId, Map channelMap) { - LOG.debug("TipWlanOvsdbClient::processNewChannelsRequest for AP {}", apId); + public String processNewChannelsRequest(String apId, Map backupChannelMap, Map primaryChannelMap) { + LOG.info("TipWlanOvsdbClient::processNewChannelsRequest for AP {}", apId); try { OvsdbSession session = ovsdbSessionMapInterface.getSession(apId); OvsdbClient ovsdbClient = session.getOvsdbClient(); - ovsdbDao.processNewChannelsRequest(ovsdbClient, channelMap); - LOG.debug("TipWlanOvsdbClient::processNewChannelsRequest change backup channels for AP {}", apId); - return "Triggered a factory reset of AP " + apId; + ovsdbDao.processNewChannelsRequest(ovsdbClient, backupChannelMap, primaryChannelMap); + LOG.info("TipWlanOvsdbClient::processNewChannelsRequest change backup and/or primary channels for AP {}", apId); + return " change backup and/or primary channels for AP " + apId; } catch (Exception e) { - LOG.error("TipWlanOvsdbClient::processNewChannelsRequest failed to change backup channels for AP {}", apId, + LOG.error("TipWlanOvsdbClient::processNewChannelsRequest failed to change backup and/or primary channels for AP {}", apId, e); - return " failed to change backup channels for AP " + apId; + return "failed to change backup and/or primary channels for AP " + apId; } } diff --git a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java index 933df2d..c1742bd 100644 --- a/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java +++ b/opensync-gateway/src/main/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDao.java @@ -5656,13 +5656,13 @@ public class OvsdbDao { } } - public void processNewChannelsRequest(OvsdbClient ovsdbClient, Map channelMap) { + public void processNewChannelsRequest(OvsdbClient ovsdbClient, Map backupChannelMap, Map primaryChannelMap) { - LOG.info("OvsdbDao::processNewChannelsRequest {}", channelMap); + LOG.info("OvsdbDao::processNewChannelsRequest backup {} primary {}", backupChannelMap, primaryChannelMap); try { List operations = new ArrayList<>(); - channelMap.entrySet().stream().forEach(c -> { + backupChannelMap.entrySet().stream().forEach(c -> { String freqBand = OvsdbToWlanCloudTypeMappingUtility.getOvsdbRadioFreqBandForRadioType(c.getKey()); List conditions = new ArrayList<>(); conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand))); @@ -5672,19 +5672,25 @@ public class OvsdbDao { operations.add(new Update(wifiRrmConfigDbTable, conditions, row)); }); + primaryChannelMap.entrySet().stream().forEach(c -> { + String freqBand = OvsdbToWlanCloudTypeMappingUtility.getOvsdbRadioFreqBandForRadioType(c.getKey()); + List conditions = new ArrayList<>(); + conditions.add(new Condition("freq_band", Function.EQUALS, new Atom<>(freqBand))); + Map updateColumns = new HashMap<>(); + updateColumns.put("channel", new Atom<>(c.getValue())); + Row row = new Row(updateColumns); + operations.add(new Update(wifiRadioConfigDbTable, conditions, row)); + }); + CompletableFuture fResult = ovsdbClient.transact(ovsdbName, operations); OperationResult[] result = fResult.get(ovsdbTimeoutSec, TimeUnit.SECONDS); - if (LOG.isDebugEnabled()) { - LOG.debug("processNewChannelsRequest::Update backup channel(s) for {}:", wifiRrmConfigDbTable); - - for (OperationResult res : result) { - LOG.debug("Op Result {}", res); - } + for (OperationResult res : result) { + LOG.info("Op Result {}", res); } - LOG.info("Updated Wifi_RRM_Config"); + LOG.info("Updated ovsdb config for primary and backup channels."); } catch (ExecutionException e) { LOG.error("Error in processNewChannelsRequest", e); } catch (OvsdbClientException | TimeoutException | InterruptedException e) { @@ -5693,6 +5699,8 @@ public class OvsdbDao { } } + + public AutoOrManualValue getSourcedValue(SourceType source, int profileValue, int equipmentValue) { if (source == SourceType.profile) { diff --git a/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/OpensyncGatewayTipWlanOvsdbClientTest.java b/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/OpensyncGatewayTipWlanOvsdbClientTest.java index a320796..5116e6d 100644 --- a/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/OpensyncGatewayTipWlanOvsdbClientTest.java +++ b/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/OpensyncGatewayTipWlanOvsdbClientTest.java @@ -1,6 +1,7 @@ package com.telecominfraproject.wlan.opensync.ovsdb; import java.util.HashSet; +import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; @@ -23,6 +24,7 @@ import org.springframework.context.annotation.Import; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; +import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.opensync.external.integration.OpensyncExternalIntegrationInterface; import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSession; import com.telecominfraproject.wlan.opensync.external.integration.OvsdbSessionMapInterface; @@ -33,6 +35,7 @@ import com.vmware.ovsdb.callback.MonitorCallback; import com.vmware.ovsdb.exception.OvsdbClientException; import com.vmware.ovsdb.protocol.methods.MonitorRequests; import com.vmware.ovsdb.protocol.methods.TableUpdates; +import com.vmware.ovsdb.protocol.operation.result.OperationResult; import com.vmware.ovsdb.service.OvsdbClient; import io.netty.handler.ssl.SslContext; @@ -68,6 +71,9 @@ public class OpensyncGatewayTipWlanOvsdbClientTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private CompletableFuture completableFuture; + @Mock(answer = Answers.RETURNS_MOCKS) + private CompletableFuture operationResult; + @Autowired TipWlanOvsdbClient tipwlanOvsdbClient; @@ -156,4 +162,30 @@ public class OpensyncGatewayTipWlanOvsdbClientTest { } + @Test + public void testProcessNewChannelsRequest() throws Exception { + + OvsdbSession ovsdbSession = Mockito.mock(OvsdbSession.class, Mockito.RETURNS_DEEP_STUBS); + Mockito.when(ovsdbSession.getOvsdbClient()).thenReturn(ovsdbClient); + + Mockito.when(ovsdbSessionMapInterface.getSession("Test_Client_21P10C68818122")).thenReturn(ovsdbSession); + + + String expectedResponse = " change backup and/or primary channels for AP Test_Client_21P10C68818122"; + + assert (tipwlanOvsdbClient.processNewChannelsRequest("Test_Client_21P10C68818122", + Map.of(RadioType.is2dot4GHz, Integer.valueOf(1), RadioType.is5GHzL, Integer.valueOf(40), + RadioType.is5GHzU, Integer.valueOf(153)), + Map.of(RadioType.is2dot4GHz, Integer.valueOf(6), RadioType.is5GHzL, Integer.valueOf(36), + RadioType.is5GHzU, Integer.valueOf(149))) + .equals(expectedResponse)); + + Mockito.verify(ovsdbDao).processNewChannelsRequest(ovsdbClient, + Map.of(RadioType.is2dot4GHz, Integer.valueOf(1), RadioType.is5GHzL, Integer.valueOf(40), + RadioType.is5GHzU, Integer.valueOf(153)), + Map.of(RadioType.is2dot4GHz, Integer.valueOf(6), RadioType.is5GHzL, Integer.valueOf(36), + RadioType.is5GHzU, Integer.valueOf(149))); + + } + } diff --git a/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDaoTest.java b/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDaoTest.java index 819653d..20285d7 100644 --- a/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDaoTest.java +++ b/opensync-gateway/src/test/java/com/telecominfraproject/wlan/opensync/ovsdb/dao/OvsdbDaoTest.java @@ -35,6 +35,7 @@ import org.springframework.test.context.junit4.SpringRunner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.telecominfraproject.wlan.core.model.equipment.MacAddress; +import com.telecominfraproject.wlan.core.model.equipment.RadioType; import com.telecominfraproject.wlan.location.models.Location; import com.telecominfraproject.wlan.opensync.external.integration.models.ConnectNodeInfo; import com.telecominfraproject.wlan.opensync.external.integration.models.OpensyncAPConfig; @@ -53,6 +54,7 @@ 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.protocol.operation.result.UpdateResult; import com.vmware.ovsdb.protocol.schema.DatabaseSchema; import com.vmware.ovsdb.protocol.schema.TableSchema; import com.vmware.ovsdb.service.OvsdbClient; @@ -699,6 +701,28 @@ public class OvsdbDaoTest { Mockito.verify(futureResult).get(30L, TimeUnit.SECONDS); + } + + @Test + public void testProcessNewChannelsRequest() throws Exception { + + + OperationResult[] testProcessNewChannelsRequestResult = new OperationResult[] { new UpdateResult(1), new UpdateResult(1), new UpdateResult(1), new UpdateResult(1), new UpdateResult(1), new UpdateResult(1) }; + + Mockito.when(futureResult.get(30L, TimeUnit.SECONDS)).thenReturn(testProcessNewChannelsRequestResult); + + Mockito.when(ovsdbClient.transact(Mockito.eq(OvsdbDao.ovsdbName), Mockito.anyList())).thenReturn(futureResult); + + ovsdbDao.processNewChannelsRequest(ovsdbClient, + Map.of(RadioType.is2dot4GHz, Integer.valueOf(1), RadioType.is5GHzL, Integer.valueOf(40), + RadioType.is5GHzU, Integer.valueOf(153)), + Map.of(RadioType.is2dot4GHz, Integer.valueOf(6), RadioType.is5GHzL, Integer.valueOf(36), + RadioType.is5GHzU, Integer.valueOf(149))); + + Mockito.verify(futureResult).get(30L, TimeUnit.SECONDS); + + + } @Test(expected = RuntimeException.class)