diff options
author | Valerij Fredriksen <freva@users.noreply.github.com> | 2022-04-27 14:54:43 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-04-27 14:54:43 +0200 |
commit | 98023879174ecab71aa3c360ca78312509505b56 (patch) | |
tree | d923ff8e3ba5836a4bbca51575f6b5a7810702dd /controller-server | |
parent | 0b49b86e54ff4eb7feb41d6bcfdb476486585324 (diff) | |
parent | 8ca20863ae2aa5da3afaa2d10566e65d218c574d (diff) |
Merge pull request #22307 from vespa-engine/jonmv/warn-on-old-parent
Jonmv/warn on old parent
Diffstat (limited to 'controller-server')
11 files changed, 120 insertions, 61 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackage.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackage.java index 0d39703b70d..344ed7ec729 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackage.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/pkg/ApplicationPackage.java @@ -78,6 +78,7 @@ public class ApplicationPackage { private final ZipArchiveCache files; private final Optional<Version> compileVersion; private final Optional<Instant> buildTime; + private final Optional<Version> parentVersion; private final List<X509Certificate> trustedCertificates; /** @@ -110,6 +111,7 @@ public class ApplicationPackage { Optional<Inspector> buildMetaObject = files.get(buildMetaFile).map(SlimeUtils::jsonToSlime).map(Slime::get); this.compileVersion = buildMetaObject.flatMap(object -> parse(object, "compileVersion", field -> Version.fromString(field.asString()))); this.buildTime = buildMetaObject.flatMap(object -> parse(object, "buildTime", field -> Instant.ofEpochMilli(field.asLong()))); + this.parentVersion = buildMetaObject.flatMap(object -> parse(object, "parentVersion", field -> Version.fromString(field.asString()))); this.trustedCertificates = files.get(trustedCertificatesFile).map(bytes -> X509CertificateUtils.certificateListFromPem(new String(bytes, UTF_8))).orElse(List.of()); @@ -159,6 +161,9 @@ public class ApplicationPackage { /** Returns the time this package was built, if known. */ public Optional<Instant> buildTime() { return buildTime; } + /** Returns the parent version used to compile the package, if known. */ + public Optional<Version> parentVersion() { return parentVersion; } + /** Returns the list of certificates trusted by this application, or an empty list if no trust configured. */ public List<X509Certificate> trustedCertificates() { return trustedCertificates; @@ -166,7 +171,7 @@ public class ApplicationPackage { private static <Type> Optional<Type> parse(Inspector buildMetaObject, String fieldName, Function<Inspector, Type> mapper) { if ( ! buildMetaObject.field(fieldName).valid()) - throw new IllegalArgumentException("Missing value '" + fieldName + "' in '" + buildMetaFile + "'"); + return Optional.empty(); try { return Optional.of(mapper.apply(buildMetaObject.field(fieldName))); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java index b0966f7db21..1d56e2db08b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/JobController.java @@ -461,9 +461,7 @@ public class JobController { } /** Accepts and stores a new application package and test jar pair under a generated application version key. */ - public ApplicationVersion submit(TenantAndApplicationId id, Optional<SourceRevision> revision, Optional<String> authorEmail, - Optional<String> sourceUrl, long projectId, ApplicationPackage applicationPackage, - byte[] testPackageBytes, Optional<String> description, int risk) { + public ApplicationVersion submit(TenantAndApplicationId id, Submission submission, long projectId) { ApplicationController applications = controller.applications(); AtomicReference<ApplicationVersion> version = new AtomicReference<>(); applications.lockApplicationOrThrow(id, application -> { @@ -471,47 +469,46 @@ public class JobController { Optional<ApplicationPackage> previousPackage = previousVersion.flatMap(previous -> applications.applicationStore().find(id.tenant(), id.application(), previous.buildNumber().getAsLong())) .map(ApplicationPackage::new); long previousBuild = previousVersion.map(latestVersion -> latestVersion.buildNumber().getAsLong()).orElse(0L); - String packageHash = applicationPackage.bundleHash() + ApplicationPackage.calculateHash(testPackageBytes); - RevisionId revisionId = RevisionId.forProduction(1 + previousBuild); - version.set(ApplicationVersion.forProduction(revisionId, - revision, - authorEmail, - applicationPackage.compileVersion(), - applicationPackage.buildTime(), - sourceUrl, - revision.map(SourceRevision::commit), - Optional.of(packageHash), - description, - risk)); - - byte[] diff = previousPackage.map(previous -> ApplicationPackageDiff.diff(previous, applicationPackage)) - .orElseGet(() -> ApplicationPackageDiff.diffAgainstEmpty(applicationPackage)); + version.set(submission.toApplicationVersion(1 + previousBuild)); + + byte[] diff = previousPackage.map(previous -> ApplicationPackageDiff.diff(previous, submission.applicationPackage())) + .orElseGet(() -> ApplicationPackageDiff.diffAgainstEmpty(submission.applicationPackage())); applications.applicationStore().put(id.tenant(), id.application(), version.get().id(), - applicationPackage.zippedContent(), - testPackageBytes, + submission.applicationPackage().zippedContent(), + submission.testPackage(), diff); applications.applicationStore().putMeta(id.tenant(), id.application(), controller.clock().instant(), - applicationPackage.metaDataZip()); + submission.applicationPackage().metaDataZip()); application = application.withProjectId(projectId == -1 ? OptionalLong.empty() : OptionalLong.of(projectId)); application = application.withRevisions(revisions -> revisions.with(version.get())); application = withPrunedPackages(application); - TestSummary testSummary = TestPackage.validateTests(applicationPackage.deploymentSpec(), testPackageBytes); + TestSummary testSummary = TestPackage.validateTests(submission.applicationPackage().deploymentSpec(), submission.testPackage()); if (testSummary.problems().isEmpty()) - controller.notificationsDb().removeNotification(NotificationSource.from(id), - Type.testPackage); + controller.notificationsDb().removeNotification(NotificationSource.from(id), Type.testPackage); else controller.notificationsDb().setNotification(NotificationSource.from(id), Type.testPackage, Notification.Level.warning, testSummary.problems()); - applications.storeWithUpdatedConfig(application, applicationPackage); + submission.applicationPackage().parentVersion().ifPresent(parent -> { + if (parent.getMajor() < controller.readSystemVersion().getMajor()) + controller.notificationsDb().setNotification(NotificationSource.from(id), + Type.submission, + Notification.Level.warning, + "Parent version used to compile the application is on a " + + "lower major version than the current Vespa Cloud version"); + else + controller.notificationsDb().removeNotification(NotificationSource.from(id), Type.submission); + }); + + applications.storeWithUpdatedConfig(application, submission.applicationPackage()); applications.deploymentTrigger().triggerNewRevision(id); }); return version.get(); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Submission.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Submission.java new file mode 100644 index 00000000000..e366920690b --- /dev/null +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/Submission.java @@ -0,0 +1,57 @@ +package com.yahoo.vespa.hosted.controller.deployment; + +import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion; +import com.yahoo.vespa.hosted.controller.api.integration.deployment.RevisionId; +import com.yahoo.vespa.hosted.controller.api.integration.deployment.SourceRevision; +import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; + +import java.util.Optional; + +import static com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage.calculateHash; + +/** + * @author jonmv + */ +public class Submission { + + private final ApplicationPackage applicationPackage; + private final byte[] testPackage; + private final Optional<String> sourceUrl; + private final Optional<SourceRevision> source; + private final Optional<String> authorEmail; + private final Optional<String> description; + private final int risk; + + public Submission(ApplicationPackage applicationPackage, byte[] testPackage, Optional<String> sourceUrl, + Optional<SourceRevision> source, Optional<String> authorEmail, Optional<String> description, int risk) { + this.applicationPackage = applicationPackage; + this.testPackage = testPackage; + this.sourceUrl = sourceUrl; + this.source = source; + this.authorEmail = authorEmail; + this.description = description; + this.risk = risk; + } + + public static Submission basic(ApplicationPackage applicationPackage, byte[] testPackage) { + return new Submission(applicationPackage, testPackage, Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), 0); + } + + public ApplicationVersion toApplicationVersion(long number) { + return ApplicationVersion.forProduction(RevisionId.forProduction(number), + source, + authorEmail, + applicationPackage.compileVersion(), + applicationPackage.buildTime(), + sourceUrl, + source.map(SourceRevision::commit), + Optional.of(applicationPackage.bundleHash() + calculateHash(testPackage)), + description, + risk); + } + + public ApplicationPackage applicationPackage() { return applicationPackage; } + + public byte[] testPackage() { return testPackage; } + +} diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/notification/Notification.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/notification/Notification.java index 38cb09355ca..8a363405c41 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/notification/Notification.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/notification/Notification.java @@ -69,6 +69,9 @@ public class Notification { /** Related to contents of application package, e.g., usage of deprecated features/syntax */ applicationPackage, + /** Related to contents of application package, e.g., old parent or compile version, or errors detectable on submission */ + submission, + /** Related to contents of application test package, e.g., mismatch between deployment spec and provided tests */ testPackage, diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java index 570dbdd870e..16ec240a116 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NotificationsSerializer.java @@ -92,6 +92,7 @@ public class NotificationsSerializer { private static String asString(Notification.Type type) { switch (type) { case applicationPackage: return "applicationPackage"; + case submission: return "submission"; case testPackage: return "testPackage"; case deployment: return "deployment"; case feedBlock: return "feedBlock"; @@ -103,6 +104,7 @@ public class NotificationsSerializer { private static Notification.Type typeFrom(Inspector field) { switch (field.asString()) { case "applicationPackage": return Notification.Type.applicationPackage; + case "submission": return Notification.Type.submission; case "testPackage": return Notification.Type.testPackage; case "deployment": return Notification.Type.deployment; case "feedBlock": return Notification.Type.feedBlock; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index 6dc5e4565de..88b319d0051 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -94,6 +94,7 @@ import com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTrigger.ChangesToCancel; import com.yahoo.vespa.hosted.controller.deployment.JobStatus; import com.yahoo.vespa.hosted.controller.deployment.Run; +import com.yahoo.vespa.hosted.controller.deployment.Submission; import com.yahoo.vespa.hosted.controller.deployment.TestConfigSerializer; import com.yahoo.vespa.hosted.controller.maintenance.ResourceMeterMaintainer; import com.yahoo.vespa.hosted.controller.notification.Notification; @@ -744,6 +745,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { private static String notificationTypeAsString(Notification.Type type) { switch (type) { + case submission: case applicationPackage: return "applicationPackage"; case testPackage: return "testPackage"; case deployment: return "deployment"; @@ -2713,31 +2715,26 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { ApplicationPackage applicationPackage = new ApplicationPackage(dataParts.get(EnvironmentResource.APPLICATION_ZIP), true); + byte[] testPackage = dataParts.get(EnvironmentResource.APPLICATION_TEST_ZIP); + Submission submission = new Submission(applicationPackage, testPackage, sourceUrl, sourceRevision, authorEmail, description, risk); + controller.applications().verifyApplicationIdentityConfiguration(TenantName.from(tenant), Optional.empty(), Optional.empty(), applicationPackage, Optional.of(requireUserPrincipal(request))); - ensureApplicationExists(TenantAndApplicationId.from(tenant, application), request); - - return JobControllerApiHandlerHelper.submitResponse(controller.jobController(), - tenant, - application, - sourceRevision, - authorEmail, - sourceUrl, - description, - risk, - projectId, - applicationPackage, - dataParts.get(EnvironmentResource.APPLICATION_TEST_ZIP)); + TenantAndApplicationId id = TenantAndApplicationId.from(tenant, application); + ensureApplicationExists(id, request); + return JobControllerApiHandlerHelper.submitResponse(controller.jobController(), id, submission, projectId); } private HttpResponse removeAllProdDeployments(String tenant, String application) { - JobControllerApiHandlerHelper.submitResponse(controller.jobController(), tenant, application, - Optional.empty(), Optional.empty(), Optional.empty(), Optional.empty(), 0, 1, - ApplicationPackage.deploymentRemoval(), new byte[0]); + JobControllerApiHandlerHelper.submitResponse(controller.jobController(), + TenantAndApplicationId.from(tenant, application), + new Submission(ApplicationPackage.deploymentRemoval(), new byte[0], Optional.empty(), + Optional.empty(), Optional.empty(), Optional.empty(), 0), + 0); return new MessageResponse("All deployments removed"); } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java index de03bbfb767..80425609aa6 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/JobControllerApiHandlerHelper.java @@ -34,6 +34,7 @@ import com.yahoo.vespa.hosted.controller.deployment.Run; import com.yahoo.vespa.hosted.controller.deployment.RunLog; import com.yahoo.vespa.hosted.controller.deployment.RunStatus; import com.yahoo.vespa.hosted.controller.deployment.Step; +import com.yahoo.vespa.hosted.controller.deployment.Submission; import com.yahoo.vespa.hosted.controller.deployment.Versions; import com.yahoo.vespa.hosted.controller.versions.VersionStatus; import com.yahoo.vespa.hosted.controller.versions.VespaVersion; @@ -194,14 +195,8 @@ class JobControllerApiHandlerHelper { * * @return Response with the new application version */ - static HttpResponse submitResponse(JobController jobController, String tenant, String application, - Optional<SourceRevision> sourceRevision, Optional<String> authorEmail, - Optional<String> sourceUrl, Optional<String> description, int risk, long projectId, - ApplicationPackage applicationPackage, byte[] testPackage) { - ApplicationVersion version = jobController.submit(TenantAndApplicationId.from(tenant, application), sourceRevision, authorEmail, - sourceUrl, projectId, applicationPackage, testPackage, description, risk); - - return new MessageResponse("application " + version); + static HttpResponse submitResponse(JobController jobController, TenantAndApplicationId id, Submission submission, long projectId) { + return new MessageResponse("application " + jobController.submit(id, submission, projectId)); } /** Aborts any job of the given type. */ diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java index 20b64419f28..0ecac036913 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java @@ -38,6 +38,7 @@ import com.yahoo.vespa.hosted.controller.application.pkg.ApplicationPackage; import com.yahoo.vespa.hosted.controller.deployment.ApplicationPackageBuilder; import com.yahoo.vespa.hosted.controller.deployment.DeploymentContext; import com.yahoo.vespa.hosted.controller.deployment.DeploymentTester; +import com.yahoo.vespa.hosted.controller.deployment.Submission; import com.yahoo.vespa.hosted.controller.integration.ZoneApiMock; import com.yahoo.vespa.hosted.controller.notification.Notification; import com.yahoo.vespa.hosted.controller.notification.Notification.Level; @@ -1118,8 +1119,7 @@ public class ControllerTest { ApplicationPackage applicationPackage = ApplicationPackageBuilder.fromDeploymentXml(deploymentXml); byte[] testPackage = ApplicationPackage.filesZip(Map.of("tests/staging-test/foo.json", new byte[0])); var app = tester.newDeploymentContext(); - tester.jobs().submit(app.application().id(), Optional.empty(), Optional.empty(), Optional.empty(), 1, - applicationPackage, testPackage, Optional.empty(), 0); + tester.jobs().submit(app.application().id(), Submission.basic(applicationPackage, testPackage), 1); assertEquals(List.of(new Notification(tester.clock().instant(), Type.testPackage, Level.warning, diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java index a464e3d7e9b..27cf1554b4d 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/ApplicationPackageBuilder.java @@ -317,7 +317,9 @@ public class ApplicationPackageBuilder { } private static byte[] buildMeta(Version compileVersion) { - return ("{\"compileVersion\":\"" + compileVersion.toFullString() + "\",\"buildTime\":1000}").getBytes(UTF_8); + return ("{\"compileVersion\":\"" + compileVersion.toFullString() + + "\",\"buildTime\":1000,\"parentVersion\":\"" + + compileVersion.toFullString() + "\"}").getBytes(UTF_8); } public ApplicationPackage build() { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java index ad6a987d42b..fd294f9cf9f 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java @@ -311,7 +311,7 @@ public class DeploymentContext { .projectId() .orElse(1000); // These are really set through submission, so just pick one if it hasn't been set. var testerpackage = new byte[]{ (byte) (salt >> 56), (byte) (salt >> 48), (byte) (salt >> 40), (byte) (salt >> 32), (byte) (salt >> 24), (byte) (salt >> 16), (byte) (salt >> 8), (byte) salt }; - lastSubmission = jobs.submit(applicationId, sourceRevision, Optional.of("a@b"), Optional.empty(), projectId, applicationPackage, testerpackage, Optional.empty(), risk).id(); + lastSubmission = jobs.submit(applicationId, new Submission(applicationPackage, testerpackage, Optional.empty(), sourceRevision, Optional.of("a@b"), Optional.empty(), risk), projectId).id(); return this; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java index 19971a0ee5b..5fd1e8347ef 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/JobRunnerTest.java @@ -18,6 +18,7 @@ import com.yahoo.vespa.hosted.controller.deployment.RunStatus; import com.yahoo.vespa.hosted.controller.deployment.Step; import com.yahoo.vespa.hosted.controller.deployment.Step.Status; import com.yahoo.vespa.hosted.controller.deployment.StepRunner; +import com.yahoo.vespa.hosted.controller.deployment.Submission; import com.yahoo.vespa.hosted.controller.deployment.Versions; import com.yahoo.vespa.hosted.controller.integration.MetricsMock; import org.junit.Test; @@ -91,9 +92,9 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); byte[] testPackageBytes = new byte[0]; - jobs.submit(appId, Optional.empty(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); + jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2); - start(jobs, id, systemTest); + start(jobs, id, systemTest); try { start(jobs, id, systemTest); fail("Job is already running, so this should not be allowed!"); @@ -123,7 +124,7 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); byte[] testPackageBytes = new byte[0]; - jobs.submit(appId, Optional.empty(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); + jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2); Supplier<Run> run = () -> jobs.last(id, systemTest).get(); start(jobs, id, systemTest); @@ -231,7 +232,7 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); byte[] testPackageBytes = new byte[0]; - jobs.submit(appId, Optional.empty(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); + jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2); RunId runId = new RunId(id, systemTest, 1); start(jobs, id, systemTest); @@ -269,7 +270,7 @@ public class JobRunnerTest { ApplicationId instanceId = appId.defaultInstance(); JobId jobId = new JobId(instanceId, systemTest); byte[] testPackageBytes = new byte[0]; - jobs.submit(appId, Optional.empty(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); + jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2); assertFalse(jobs.lastSuccess(jobId).isPresent()); for (int i = 0; i < jobs.historyLength(); i++) { @@ -365,7 +366,7 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); byte[] testPackageBytes = new byte[0]; - jobs.submit(appId, Optional.empty(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); + jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2); start(jobs, id, systemTest); tester.clock().advance(JobRunner.jobTimeout.plus(Duration.ofSeconds(1))); @@ -383,7 +384,7 @@ public class JobRunnerTest { TenantAndApplicationId appId = tester.createApplication("tenant", "real", "default").id(); ApplicationId id = appId.defaultInstance(); byte[] testPackageBytes = new byte[0]; - jobs.submit(appId, Optional.empty(), Optional.empty(), Optional.empty(), 2, applicationPackage, testPackageBytes, Optional.empty(), 0); + jobs.submit(appId, Submission.basic(applicationPackage, testPackageBytes), 2); for (Step step : JobProfile.of(systemTest).steps()) outcomes.put(step, running); |