Page Menu
Home
Search
Configure Global Search
Log In
Files
F13257523
test_file_storage_moving.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
6 KB
Subscribers
None
test_file_storage_moving.py
View Options
from
__future__
import
absolute_import
import
datetime
import
responses
from
pillar.tests
import
AbstractPillarTest
# Always do a final test run (and commit with) assert_all_requests_are_fired=True.
# Setting it to False can help track down other issues, though, that can be masked
# by the error of RequestsMock.
mock
=
responses
.
RequestsMock
(
assert_all_requests_are_fired
=
True
# assert_all_requests_are_fired=False
)
class
ChangeBackendTest
(
AbstractPillarTest
):
def
setUp
(
self
,
**
kwargs
):
AbstractPillarTest
.
setUp
(
self
,
**
kwargs
)
self
.
project_id
,
self
.
project
=
self
.
ensure_project_exists
()
responses
.
assert_all_requests_are_fired
=
True
@mock.activate
def
test_file_and_variations
(
self
):
from
pillar.api.file_storage
import
moving
,
generate_link
image_file_id
,
fdoc
=
self
.
_create_image_file_doc
()
# Expect GETs on regenerated links.
mock
.
add
(
mock
.
GET
,
generate_link
(
'unittest'
,
fdoc
[
'file_path'
]),
body
=
'file-content'
,
content_type
=
'image/jpeg'
)
for
variation
in
fdoc
[
'variations'
]:
mock
.
add
(
mock
.
GET
,
generate_link
(
'unittest'
,
variation
[
'file_path'
]),
body
=
'file-content'
,
content_type
=
'image/jpeg'
)
with
self
.
app
.
test_request_context
():
moving
.
change_file_storage_backend
(
image_file_id
,
'gcs'
)
# Check that the file document has been updated correctly
files_coll
=
self
.
app
.
data
.
driver
.
db
[
'files'
]
fdoc
=
files_coll
.
find_one
(
image_file_id
)
self
.
assertEqual
(
u'gcs'
,
fdoc
[
'backend'
])
self
.
assertIn
(
u'/path/to/testing/gcs/'
,
fdoc
[
'link'
])
for
variation
in
fdoc
[
'variations'
]:
self
.
assertIn
(
u'/path/to/testing/gcs/'
,
variation
[
'link'
])
@mock.activate
def
test_only_variations
(
self
):
from
pillar.api.file_storage
import
moving
,
generate_link
image_file_id
,
fdoc
=
self
.
_create_image_file_doc
()
# Expect GETs on regenerated links.
mock
.
add
(
mock
.
GET
,
generate_link
(
'unittest'
,
fdoc
[
'file_path'
]),
status
=
404
)
for
variation
in
fdoc
[
'variations'
]:
mock
.
add
(
mock
.
GET
,
generate_link
(
'unittest'
,
variation
[
'file_path'
]),
body
=
'file-content'
,
content_type
=
'image/jpeg'
)
with
self
.
app
.
test_request_context
():
moving
.
change_file_storage_backend
(
image_file_id
,
'gcs'
)
# Check that the file document has been updated correctly
files_coll
=
self
.
app
.
data
.
driver
.
db
[
'files'
]
fdoc
=
files_coll
.
find_one
(
image_file_id
)
self
.
assertEqual
(
u'gcs'
,
fdoc
[
'backend'
])
self
.
assertIn
(
u'/path/to/testing/gcs/'
,
fdoc
[
'link'
])
for
variation
in
fdoc
[
'variations'
]:
self
.
assertIn
(
u'/path/to/testing/gcs/'
,
variation
[
'link'
])
@mock.activate
def
test_no_variations
(
self
):
from
pillar.api.file_storage
import
moving
,
generate_link
image_file_id
,
fdoc
=
self
.
_create_image_file_doc
(
variations
=
False
)
# Expect GETs on regenerated links.
mock
.
add
(
mock
.
GET
,
generate_link
(
'unittest'
,
fdoc
[
'file_path'
]),
body
=
'file-content'
,
content_type
=
'image/jpeg'
)
with
self
.
app
.
test_request_context
():
moving
.
change_file_storage_backend
(
image_file_id
,
'gcs'
)
# Check that the file document has been updated correctly
files_coll
=
self
.
app
.
data
.
driver
.
db
[
'files'
]
fdoc
=
files_coll
.
find_one
(
image_file_id
)
self
.
assertEqual
(
u'gcs'
,
fdoc
[
'backend'
])
self
.
assertIn
(
u'/path/to/testing/gcs/'
,
fdoc
[
'link'
])
def
_create_image_file_doc
(
self
,
variations
=
True
):
fdoc
=
{
'status'
:
'complete'
,
'name'
:
'some-hash.jpg'
,
'backend'
:
'unittest'
,
'format'
:
'jpeg'
,
'filename'
:
'image-micak.jpg'
,
'project'
:
self
.
project_id
,
'length'
:
2708160
,
'content_type'
:
'image/jpeg'
,
'file_path'
:
'3c61e953ee644786b98027e043fd3af3.jpg'
,
'length_aggregate_in_bytes'
:
3196056
,
'link'
:
'https://server.cdnsun/projid/_
%2F
some-hash.jpg'
,
'link_expires'
:
datetime
.
datetime
(
2016
,
8
,
23
,
15
,
23
,
48
),
'md5'
:
''
,}
if
variations
:
fdoc
[
'variations'
]
=
[
{
'length'
:
3312
,
'link'
:
'https://server.cdnsun/projid/_
%2F
some-hash-b.jpg'
,
'content_type'
:
'image/jpeg'
,
'file_path'
:
'3c61e953ee644786b98027e043fd3af3-b.jpg'
,
'size'
:
'b'
,
'md5'
:
''
},
{
'height'
:
2048
,
'width'
:
2048
,
'length'
:
381736
,
'link'
:
'https://server.cdnsun/projid/_
%2F
some-hash-h.jpg'
,
'content_type'
:
'image/jpeg'
,
'md5'
:
''
,
'file_path'
:
'3c61e953ee644786b98027e043fd3af3-h.jpg'
,
'size'
:
'h'
},
{
'height'
:
320
,
'width'
:
320
,
'length'
:
8818
,
'link'
:
'https://server.cdnsun/projid/_
%2F
some-hash-m.jpg'
,
'content_type'
:
'image/jpeg'
,
'md5'
:
''
,
'file_path'
:
'3c61e953ee644786b98027e043fd3af3-m.jpg'
,
'size'
:
'm'
},
{
'height'
:
1024
,
'width'
:
1024
,
'length'
:
89012
,
'link'
:
'https://server.cdnsun/projid/_
%2F
some-hash-l.jpg'
,
'content_type'
:
'image/jpeg'
,
'md5'
:
''
,
'file_path'
:
'3c61e953ee644786b98027e043fd3af3-l.jpg'
,
'size'
:
'l'
},
{
'height'
:
90
,
'width'
:
90
,
'length'
:
1774
,
'link'
:
'https://server.cdnsun/projid/_
%2F
some-hash-s.jpg'
,
'content_type'
:
'image/jpeg'
,
'md5'
:
''
,
'file_path'
:
'3c61e953ee644786b98027e043fd3af3-s.jpg'
,
'size'
:
's'
},
{
'height'
:
160
,
'width'
:
160
,
'length'
:
3244
,
'link'
:
'https://server.cdnsun/projid/_
%2F
some-hash-t.jpg'
,
'content_type'
:
'image/jpeg'
,
'is_public'
:
True
,
'md5'
:
''
,
'file_path'
:
'3c61e953ee644786b98027e043fd3af3-t.jpg'
,
'size'
:
't'
}]
with
self
.
app
.
test_request_context
():
files_coll
=
self
.
app
.
data
.
driver
.
db
[
'files'
]
result
=
files_coll
.
insert_one
(
fdoc
)
file_id
=
result
.
inserted_id
# Re-fetch from the database, so that we're sure we return the same as is stored.
# This is necessary as datetimes are rounded by MongoDB.
from_db
=
files_coll
.
find_one
(
file_id
)
return
file_id
,
from_db
File Metadata
Details
Attached
Mime Type
text/x-python
Expires
Wed, Jul 6, 2:02 PM (2 d)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
7b/fe/21e3a1dfd51a033d4df659173845
Attached To
rPS Pillar
Event Timeline
Log In to Comment