Skip to content

Commit

Permalink
Merge pull request #4818 from thc202/automation/load-plan-no-jobs
Browse files Browse the repository at this point in the history
automation: load plan without jobs
  • Loading branch information
psiinon authored Aug 15, 2023
2 parents 530cd91 + f67405b commit f4c0833
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 0 deletions.
1 change: 1 addition & 0 deletions addOns/automation/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

### Fixed
- Address error logged when using the Active Scan job.
- Do not fail to load plans without jobs.

## [0.30.0] - 2023-07-11
### Changed
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,9 @@ public AutomationPlan(ExtensionAutomation ext, File file) throws IOException {
env.setPlan(this);

jobs = new ArrayList<>();
if (jobsData == null) {
return;
}

for (Object jobObj : jobsData) {
if (!(jobObj instanceof LinkedHashMap<?, ?>)) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Zed Attack Proxy (ZAP) and its related class files.
*
* ZAP is an HTTP/HTTPS proxy for assessing web application security.
*
* Copyright 2023 The ZAP Development Team
*
* Licensed 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 org.zaproxy.addon.automation;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.empty;
import static org.hamcrest.Matchers.is;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.mockito.Mockito.mock;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Locale;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import org.parosproxy.paros.Constant;
import org.zaproxy.zap.utils.I18N;

/** Unit test for {@link AutomationPlan}. */
class AutomationPlanUnitTest {

private ExtensionAutomation ext;

@BeforeEach
void setup() {
Constant.messages = new I18N(Locale.ENGLISH);
ext = mock(ExtensionAutomation.class);
}

@Test
void shouldLoadPlanWithoutJobs(@TempDir Path dir) throws IOException {
// Given
var file = dir.resolve("plan.yaml");
Files.writeString(
file,
"---\n"
+ "env:\n"
+ " contexts:\n"
+ " - name: \"Example\"\n"
+ " urls:\n"
+ " - \"https://www.example.com/\"\n");
// When
AutomationPlan plan = assertDoesNotThrow(() -> new AutomationPlan(ext, file.toFile()));
// Then
assertThat(plan.getJobs(), is(empty()));
AutomationProgress progress = plan.getProgress();
assertThat(progress.getErrors(), is(empty()));
assertThat(progress.getWarnings(), is(empty()));
}
}

0 comments on commit f4c0833

Please sign in to comment.