assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
end
- test "do not reuse job because find_or_create=false" do
- post :create, {
- job: {
- script: "hash",
- script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
- repository: "foo",
- script_parameters: {
- input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
- an_integer: '1'
- }
- },
- find_or_create: false
- }
- assert_response :success
- assert_not_nil assigns(:object)
- new_job = JSON.parse(@response.body)
- assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
- assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
+ [false, "false"].each do |whichfalse|
+ test "do not reuse job because find_or_create=#{whichfalse.inspect}" do
+ post :create, {
+ job: {
+ script: "hash",
+ script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
+ repository: "foo",
+ script_parameters: {
+ input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
+ an_integer: '1'
+ }
+ },
+ find_or_create: whichfalse
+ }
+ assert_response :success
+ assert_not_nil assigns(:object)
+ new_job = JSON.parse(@response.body)
+ assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
+ assert_equal '4fe459abe02d9b365932b8f5dc419439ab4e2577', new_job['script_version']
+ end
end
test "do not reuse job because output is not readable by user" do
assert_not_nil assigns(:object)
new_job = JSON.parse(@response.body)
assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
- assert_equal '077ba2ad3ea24a929091a9e6ce545c93199b8e57', new_job['script_version']
+ assert_not_equal('4fe459abe02d9b365932b8f5dc419439ab4e2577',
+ new_job['script_version'])
end
test "cannot reuse job with find_or_create but excluded version" do
assert_not_nil assigns(:object)
new_job = JSON.parse(@response.body)
assert_not_equal 'zzzzz-8i9sb-cjs4pklxxjykqqq', new_job['uuid']
- assert_equal '077ba2ad3ea24a929091a9e6ce545c93199b8e57', new_job['script_version']
+ assert_not_equal('4fe459abe02d9b365932b8f5dc419439ab4e2577',
+ new_job['script_version'])
end
BASE_FILTERS = {
'script' => ['=', 'hash'],
'script_version' => ['in git', 'master'],
'docker_image_locator' => ['=', nil],
+ 'arvados_sdk_version' => ['=', nil],
}
def filters_from_hash(hash)
end
test "can reuse a Job based on filters" do
- filter_h = BASE_FILTERS.
+ filters_hash = BASE_FILTERS.
merge('script_version' => ['in git', 'tag1'])
post(:create, {
job: {
an_integer: '1'
}
},
- filters: filters_from_hash(filter_h),
+ filters: filters_from_hash(filters_hash),
find_or_create: true,
})
assert_response :success
end
test "can not reuse a Job based on filters" do
- filter_a = filters_from_hash(BASE_FILTERS.reject { |k| k == 'script_version' })
- filter_a += [["script_version", "in git",
- "31ce37fe365b3dc204300a3e4c396ad333ed0556"],
- ["script_version", "not in git", ["tag1"]]]
+ filters = filters_from_hash(BASE_FILTERS
+ .reject { |k| k == 'script_version' })
+ filters += [["script_version", "in git",
+ "31ce37fe365b3dc204300a3e4c396ad333ed0556"],
+ ["script_version", "not in git", ["tag1"]]]
post(:create, {
job: {
script: "hash",
an_integer: '1'
}
},
- filters: filter_a,
+ filters: filters,
find_or_create: true,
})
assert_response :success
end
test "can not reuse a Job based on arbitrary filters" do
- filter_h = BASE_FILTERS.
+ filters_hash = BASE_FILTERS.
merge("created_at" => ["<", "2010-01-01T00:00:00Z"])
post(:create, {
job: {
an_integer: '1'
}
},
- filters: filters_from_hash(filter_h),
+ filters: filters_from_hash(filters_hash),
find_or_create: true,
})
assert_response :success
end
test "can reuse a Job with a Docker image hash filter" do
- filter_h = BASE_FILTERS.
+ filters_hash = BASE_FILTERS.
merge("script_version" =>
["=", "4fe459abe02d9b365932b8f5dc419439ab4e2577"],
"docker_image_locator" =>
an_integer: '1'
},
},
- filters: filters_from_hash(filter_h),
+ filters: filters_from_hash(filters_hash),
find_or_create: true,
})
assert_response :success
end
test "reuse Job with Docker image repo+tag" do
- filter_h = BASE_FILTERS.
+ filters_hash = BASE_FILTERS.
merge("script_version" =>
["=", "4fe459abe02d9b365932b8f5dc419439ab4e2577"],
"docker_image_locator" =>
an_integer: '1'
},
},
- filters: filters_from_hash(filter_h),
+ filters: filters_from_hash(filters_hash),
find_or_create: true,
})
assert_response :success
end
test "new job with unknown Docker image filter" do
- filter_h = BASE_FILTERS.
+ filters_hash = BASE_FILTERS.
merge("docker_image_locator" => ["in docker", "_nonesuchname_"])
post(:create, {
job: {
an_integer: '1'
},
},
- filters: filters_from_hash(filter_h),
+ filters: filters_from_hash(filters_hash),
find_or_create: true,
})
assert_response :success
["repository", "script"].each do |skip_key|
test "missing #{skip_key} filter raises an error" do
- filter_a = filters_from_hash(BASE_FILTERS.reject { |k| k == skip_key })
+ filters = filters_from_hash(BASE_FILTERS.reject { |k| k == skip_key })
post(:create, {
job: {
script: "hash",
an_integer: '1'
}
},
- filters: filter_a,
+ filters: filters,
find_or_create: true,
})
assert_includes(405..599, @response.code.to_i,
# 1de84a8 is on the b1 branch, after master's tip.
test "new job created from unsatisfiable minimum version filter" do
- filter_h = BASE_FILTERS.merge("script_version" => ["in git", "1de84a8"])
- check_new_job_created_from(filters: filters_from_hash(filter_h))
+ filters_hash = BASE_FILTERS.merge("script_version" => ["in git", "1de84a8"])
+ check_new_job_created_from(filters: filters_from_hash(filters_hash))
end
test "new job created from unsatisfiable minimum version parameter" do
end
test "graceful error from nonexistent minimum version filter" do
- filter_h = BASE_FILTERS.merge("script_version" =>
- ["in git", "__nosuchbranch__"])
- errors = check_errors_from(filters: filters_from_hash(filter_h))
+ filters_hash = BASE_FILTERS.merge("script_version" =>
+ ["in git", "__nosuchbranch__"])
+ errors = check_errors_from(filters: filters_from_hash(filters_hash))
assert(errors.any? { |msg| msg.include? "__nosuchbranch__" },
"bad refspec not mentioned in error message")
end
assert(errors.any? { |msg| msg.include? "__nosuchbranch__" },
"bad refspec not mentioned in error message")
end
+
+ test "can't reuse job with older Arvados SDK version" do
+ params = {
+ script_version: "31ce37fe365b3dc204300a3e4c396ad333ed0556",
+ runtime_constraints: {
+ "arvados_sdk_version" => "master",
+ "docker_image" => links(:docker_image_collection_tag).name,
+ },
+ }
+ check_new_job_created_from(job: params)
+ end
+
+ test "reuse job from arvados_sdk_version git filters" do
+ filters_hash = BASE_FILTERS.
+ merge("arvados_sdk_version" => ["in git", "commit2"])
+ filters_hash.delete("script_version")
+ params = create_foo_hash_job_params(filters:
+ filters_from_hash(filters_hash))
+ post(:create, params)
+ assert_response :success
+ assert_equal(jobs(:previous_job_run_with_arvados_sdk_version).uuid,
+ assigns(:object).uuid)
+ end
+
+ test "create new job because of arvados_sdk_version 'not in git' filters" do
+ filters_hash = BASE_FILTERS.reject { |k| k == "script_version" }
+ filters = filters_from_hash(filters_hash)
+ # Allow anything from the root commit, but before commit 2.
+ filters += [["arvados_sdk_version", "in git", "436637c8"],
+ ["arvados_sdk_version", "not in git", "00634b2b"]]
+ check_new_job_created_from(filters: filters)
+ end
end