private Set<String> validateJobHash(final String jobIdHash, final JobId recomputedId) { final Set<String> errors = Sets.newHashSet(); if (isNullOrEmpty(jobIdHash)) { errors.add(format("Job hash was not specified in job id [%s].", recomputedId)); return errors; } if (jobIdHash.indexOf(':') != -1) { // TODO (dxia) Are hashes allowed to have chars not in NAME_VERSION_PATTERN? errors.add(format("Job hash contains colon in job id [%s].", recomputedId)); } // Check that the job hash is correct if (!recomputedId.getHash().equals(jobIdHash)) { errors.add(format("Id hash mismatch: %s != %s", jobIdHash, recomputedId.getHash())); } return errors; }
/** * Validate the Job's JobId by checking name, version, and hash are * not null or empty, don't contain invalid characters. * * @param job The Job to check. * * @return A set of error Strings */ private Set<String> validateJobId(final Job job) { final Set<String> errors = Sets.newHashSet(); final JobId jobId = job.getId(); if (jobId == null) { errors.add("Job id was not specified."); return errors; } final String jobIdVersion = jobId.getVersion(); final String jobIdHash = jobId.getHash(); final JobId recomputedId = job.toBuilder().build().getId(); errors.addAll(validateJobName(jobId, recomputedId)); errors.addAll(validateJobVersion(jobIdVersion, recomputedId)); if (this.shouldValidateJobHash) { errors.addAll(validateJobHash(jobIdHash, recomputedId)); } return errors; }
protected void assertJobEquals(final Job expected, final Job actual) { final Builder expectedBuilder = expected.toBuilder(); // hack to make sure that any environment variables that were folded into the created job // because of environment variables set at runtime on the test-running-agent are removed // from the actual when we assert the equality below final Builder actualBuilder = actual.toBuilder(); final Map<String, String> metadata = Maps.newHashMap(actual.getMetadata()); for (final Map.Entry<String, String> entry : DEFAULT_METADATA_ENVVARS.entrySet()) { final String envVar = entry.getKey(); final String metadataKey = entry.getValue(); final String envValue = System.getenv(envVar); if (envValue != null && actual.getMetadata().containsKey(metadataKey) && actual.getMetadata().get(metadataKey).equals(envValue)) { metadata.remove(metadataKey); } } actualBuilder.setMetadata(metadata); // Remove created timestamp set by master actualBuilder.setCreated(null); // copy the hash expectedBuilder.setHash(actualBuilder.build().getId().getHash()); assertEquals(expectedBuilder.build(), actualBuilder.build()); }
.setCreated(clock.now().getMillis()) .setHash(job.getId().getHash()); final Job actualJob = clone.build(); final Collection<String> errors = jobValidator.validate(actualJob);
static String getJobDescription(final Job job) { final String shortHash = job.getId().getHash().substring(0, 7); return String.format("%s (Job %s)", job.getImage(), shortHash); }
private void outputDeployedMessage(final String host, final String containerId) { final StrSubstitutor subst = new StrSubstitutor(new ImmutableMap.Builder<String, Object>() .put("host", host) .put("name", job.getId().getName()) .put("version", job.getId().getVersion()) .put("hash", job.getId().getHash()) .put("job", job.toString()) .put("containerId", containerId) .build() ); log.info("{}", subst.replace(jobDeployedMessageFormat)); } }
.setCreatingUser(username) .setHash(job.getId().getHash()) .build(); final String jobIdString = actualJob.getId().toString();