Skip to content

Commit bce28fd

Browse files
eirsepriysaxen-amzn
authored andcommitted
fix detector writeTo() method missing fields (#695)
* fix detector writeTo() method missing fields Signed-off-by: Surya Sashank Nistala <[email protected]> * fix test Signed-off-by: Surya Sashank Nistala <[email protected]> --------- Signed-off-by: Surya Sashank Nistala <[email protected]>
1 parent cc0c56a commit bce28fd

File tree

2 files changed

+42
-9
lines changed

2 files changed

+42
-9
lines changed

src/main/java/org/opensearch/securityanalytics/model/Detector.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,13 +159,15 @@ public Detector(StreamInput sin) throws IOException {
159159
sin.readList(DetectorInput::readFrom),
160160
sin.readList(DetectorTrigger::readFrom),
161161
sin.readStringList(),
162-
sin.readString(),
163-
sin.readString(),
164-
sin.readString(),
165-
sin.readString(),
166-
sin.readString(),
167-
sin.readString(),
168-
sin.readMap(StreamInput::readString, StreamInput::readString)
162+
sin.readOptionalString(),
163+
sin.readOptionalString(),
164+
sin.readOptionalString(),
165+
sin.readOptionalString(),
166+
sin.readOptionalString(),
167+
sin.readOptionalString(),
168+
sin.readMap(StreamInput::readString, StreamInput::readString),
169+
sin.readStringList(),
170+
sin.readBoolean()
169171
);
170172
}
171173

@@ -197,8 +199,12 @@ public void writeTo(StreamOutput out) throws IOException {
197199
it.writeTo(out);
198200
}
199201
out.writeStringCollection(monitorIds);
200-
out.writeString(ruleIndex);
201-
202+
out.writeOptionalString(ruleIndex);
203+
out.writeOptionalString(alertsIndex);
204+
out.writeOptionalString(alertsHistoryIndex);
205+
out.writeOptionalString(alertsHistoryIndexPattern);
206+
out.writeOptionalString(findingsIndex);
207+
out.writeOptionalString(findingsIndexPattern);
202208
out.writeMap(ruleIdMonitorIdMap, StreamOutput::writeString, StreamOutput::writeString);
203209
}
204210

src/test/java/org/opensearch/securityanalytics/model/WriteableTests.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,42 @@
1313
import java.io.IOException;
1414
import java.util.List;
1515

16+
import static org.opensearch.securityanalytics.TestHelpers.parser;
1617
import static org.opensearch.securityanalytics.TestHelpers.randomDetector;
1718
import static org.opensearch.securityanalytics.TestHelpers.randomUser;
1819
import static org.opensearch.securityanalytics.TestHelpers.randomUserEmpty;
20+
import static org.opensearch.securityanalytics.TestHelpers.toJsonStringWithUser;
1921

2022
public class WriteableTests extends OpenSearchTestCase {
2123

2224
public void testDetectorAsStream() throws IOException {
2325
Detector detector = randomDetector(List.of());
2426
detector.setInputs(List.of(new DetectorInput("", List.of(), List.of(), List.of())));
27+
logger.error(toJsonStringWithUser(detector));
28+
BytesStreamOutput out = new BytesStreamOutput();
29+
detector.writeTo(out);
30+
StreamInput sin = StreamInput.wrap(out.bytes().toBytesRef().bytes);
31+
Detector newDetector = new Detector(sin);
32+
Assert.assertEquals("Round tripping Detector doesn't work", detector, newDetector);
33+
}
34+
35+
public void testDetector() throws IOException { // an edge case of detector serialization that failed testDetectorAsAStream() intermittently
36+
String detectorString = "{\"type\":\"detector\",\"name\":\"MczAuRCrve\",\"detector_type\":\"test_windows\"," +
37+
"\"user\":{\"name\":\"QhKrfthgxw\",\"backend_roles\":[\"uYvGLCPhfX\",\"fOLkcRxMWR\"],\"roles\"" +
38+
":[\"YuucNpVzTm\",\"all_access\"],\"custom_attribute_names\":[\"test_attr=test\"]," +
39+
"\"user_requested_tenant\":null},\"threat_intel_enabled\":false,\"enabled\":false,\"enabled_time\"" +
40+
":null,\"schedule\":{\"period\":{\"interval\":5,\"unit\":\"MINUTES\"}},\"inputs\":[{\"detector_input\"" +
41+
":{\"description\":\"\",\"indices\":[],\"custom_rules\":[],\"pre_packaged_rules\":[]}}],\"triggers\"" +
42+
":[{\"id\":\"SiWfaosBBiNA8if0E1bC\",\"name\":\"windows-trigger\",\"severity\":\"1\",\"types\"" +
43+
":[\"test_windows\"],\"ids\":[\"QuarksPwDump Clearing Access History\"],\"sev_levels\":[\"high\"]," +
44+
"\"tags\":[\"T0008\"],\"actions\":[],\"detection_types\":[\"rules\"]}],\"last_update_time\":" +
45+
"1698300892093,\"monitor_id\":[\"\"],\"workflow_ids\":[],\"bucket_monitor_id_rule_id\"" +
46+
":{},\"rule_topic_index\":\"\",\"alert_index\":\"\",\"alert_history_index\":\"\"," +
47+
"\"alert_history_index_pattern\":\"\",\"findings_index\":\"\",\"findings_index_pattern\":\"\"}";
48+
Detector detector = Detector.parse(parser(detectorString), null, null);
49+
// Detector detector = randomDetector(List.of());
50+
// detector.setInputs(List.of(new DetectorInput("", List.of(), List.of(), List.of())));
51+
// logger.error(toJsonStringWithUser(detector));
2552
BytesStreamOutput out = new BytesStreamOutput();
2653
detector.writeTo(out);
2754
StreamInput sin = StreamInput.wrap(out.bytes().toBytesRef().bytes);

0 commit comments

Comments
 (0)