1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: AGPL-3.0
6 require 'helpers/manifest_examples'
7 require 'helpers/time_block'
9 class CollectionModelPerformanceTest < ActiveSupport::TestCase
10 include ManifestExamples
13 # The Collection model needs to have a current token, not just a
14 # current user, to sign & verify manifests:
15 Thread.current[:token] = api_client_authorizations(:active).token
19 Thread.current[:token] = nil
22 # "crrud" == "create read render update delete", not a typo
23 slow_test "crrud cycle for a collection with a big manifest)" do
24 bigmanifest = time_block 'make example' do
25 make_manifest(streams: 100,
26 files_per_stream: 100,
28 bytes_per_block: 2**26,
29 api_token: api_client_authorizations(:active).token)
31 act_as_user users(:active) do
32 c = time_block "new (manifest_text is #{bigmanifest.length>>20}MiB)" do
33 Collection.new manifest_text: bigmanifest.dup
35 time_block 'check signatures' do
38 time_block 'check signatures + save' do
39 c.instance_eval do @signatures_checked = false end
42 c = time_block 'read' do
43 Collection.find_by_uuid(c.uuid)
45 time_block 'render' do
46 c.as_api_response(nil)
48 loc = Blob.sign_locator(Digest::MD5.hexdigest('foo') + '+3',
49 api_token: api_client_authorizations(:active).token)
50 # Note Collection's strip_manifest_text method has now removed
51 # the signatures from c.manifest_text, so we have to start from
52 # bigmanifest again here instead of just appending with "+=".
53 c.manifest_text = bigmanifest.dup + ". #{loc} 0:3:foo.txt\n"
54 time_block 'update' do
57 time_block 'delete' do