Skip to content

Commit 3f9b982

Browse files
committed
Disallow comparison data if read-back PV name is not set
1 parent 68ecad5 commit 3f9b982

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

services/save-and-restore/src/main/java/org/phoebus/service/saveandrestore/web/controllers/ConfigurationController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
*/
1818
package org.phoebus.service.saveandrestore.web.controllers;
1919

20+
import org.phoebus.applications.saveandrestore.model.ConfigPv;
2021
import org.phoebus.applications.saveandrestore.model.Configuration;
2122
import org.phoebus.applications.saveandrestore.model.ConfigurationData;
2223
import org.phoebus.applications.saveandrestore.model.Node;
@@ -58,6 +59,12 @@ public class ConfigurationController extends BaseController {
5859
public Configuration createConfiguration(@RequestParam(value = "parentNodeId") String parentNodeId,
5960
@RequestBody Configuration configuration,
6061
Principal principal) {
62+
// Validation: a ConfigPV cannot specify non-null Comparison unless read-back PV is set.
63+
for(ConfigPv configPv : configuration.getConfigurationData().getPvList()){
64+
if((configPv.getReadbackPvName() == null || configPv.getReadbackPvName().isEmpty()) && configPv.getComparison() != null){
65+
throw new IllegalArgumentException("PV item \"" + configPv.getPvName() + "\" specifies non-null comparison, but read-back PV is not set");
66+
}
67+
}
6168
configuration.getConfigurationNode().setUserName(principal.getName());
6269
return nodeDAO.createConfiguration(parentNodeId, configuration);
6370
}

services/save-and-restore/src/test/java/org/phoebus/service/saveandrestore/web/controllers/ConfigurationControllerTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,13 @@
2222
import com.fasterxml.jackson.databind.ObjectMapper;
2323
import org.junit.jupiter.api.Test;
2424
import org.junit.jupiter.api.extension.ExtendWith;
25+
import org.phoebus.applications.saveandrestore.model.Comparison;
26+
import org.phoebus.applications.saveandrestore.model.ConfigPv;
2527
import org.phoebus.applications.saveandrestore.model.Configuration;
28+
import org.phoebus.applications.saveandrestore.model.ConfigurationData;
2629
import org.phoebus.applications.saveandrestore.model.Node;
2730
import org.phoebus.applications.saveandrestore.model.NodeType;
31+
import org.phoebus.applications.saveandrestore.model.PvCompareMode;
2832
import org.phoebus.service.saveandrestore.persistence.dao.NodeDAO;
2933
import org.phoebus.service.saveandrestore.web.config.ControllersTestConfig;
3034
import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +40,8 @@
3640
import org.springframework.test.web.servlet.MockMvc;
3741
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
3842

43+
import java.util.List;
44+
3945
import static org.mockito.Mockito.reset;
4046
import static org.mockito.Mockito.when;
4147
import static org.phoebus.service.saveandrestore.web.controllers.BaseController.JSON;
@@ -155,6 +161,23 @@ public void testUpdateConfiguration() throws Exception {
155161

156162
mockMvc.perform(request).andExpect(status().isUnauthorized()
157163
);
164+
}
165+
166+
@Test
167+
public void testCreateInvalidConfiguration() throws Exception {
168+
169+
reset(nodeDAO);
170+
171+
Configuration configuration = new Configuration();
172+
configuration.setConfigurationNode(Node.builder().build());
173+
ConfigurationData configurationData = new ConfigurationData();
174+
configuration.setConfigurationData(configurationData);
175+
configurationData.setPvList(List.of(ConfigPv.builder().pvName("foo").build(),
176+
ConfigPv.builder().pvName("fooo").comparison(new Comparison(PvCompareMode.ABSOLUTE, 1.0)).build()));
177+
MockHttpServletRequestBuilder request = put("/config?parentNodeId=a")
178+
.header(HttpHeaders.AUTHORIZATION, adminAuthorization)
179+
.contentType(JSON).content(objectMapper.writeValueAsString(configuration));
158180

181+
mockMvc.perform(request).andExpect(status().isBadRequest());
159182
}
160183
}

0 commit comments

Comments
 (0)