2017-04-15 12:26:33 +00:00
import pytest
2017-04-24 17:49:29 +00:00
from mock import patch , ANY , MagicMock
2017-06-28 08:38:36 +00:00
from endpoints . api . test . shared import conduct_api_call
2017-04-19 16:27:01 +00:00
from endpoints . api . repository import RepositoryTrust , Repository
2017-06-28 08:38:36 +00:00
from endpoints . test . shared import client_with_identity
2017-04-19 16:27:01 +00:00
from features import FeatureNameValue
2017-04-24 17:49:29 +00:00
from test . fixtures import *
2017-04-15 12:26:33 +00:00
INVALID_RESPONSE = {
u ' detail ' : u " u ' invalid_req ' is not of type ' boolean ' " ,
u ' error_message ' : u " u ' invalid_req ' is not of type ' boolean ' " ,
u ' error_type ' : u ' invalid_request ' ,
u ' status ' : 400 ,
u ' title ' : u ' invalid_request ' ,
u ' type ' : u ' http://localhost/api/v1/error/invalid_request '
}
NOT_FOUND_RESPONSE = {
2017-07-24 15:05:15 +00:00
u ' detail ' :
u ' Not Found ' ,
u ' error_message ' :
u ' Not Found ' ,
u ' error_type ' :
u ' not_found ' ,
u ' message ' :
u ' You have requested this URI [/api/v1/repository/devtable/repo/changetrust] but did you mean /api/v1/repository/<apirepopath:repository>/changetrust or /api/v1/repository/<apirepopath:repository>/changevisibility or /api/v1/repository/<apirepopath:repository>/tag/<tag>/images ? ' ,
u ' status ' :
404 ,
u ' title ' :
u ' not_found ' ,
u ' type ' :
u ' http://localhost/api/v1/error/not_found '
2017-04-15 12:26:33 +00:00
}
@pytest.mark.parametrize ( ' trust_enabled,repo_found,expected_body,expected_status ' , [
2017-07-24 15:05:15 +00:00
( True , True , {
' success ' : True
} , 200 ) ,
( False , True , {
' success ' : True
} , 200 ) ,
2017-04-15 12:26:33 +00:00
( False , False , NOT_FOUND_RESPONSE , 404 ) ,
2017-07-24 15:05:15 +00:00
( ' invalid_req ' , False , INVALID_RESPONSE , 400 ) ,
2017-04-15 12:26:33 +00:00
] )
def test_post_changetrust ( trust_enabled , repo_found , expected_body , expected_status , client ) :
2017-05-01 19:51:54 +00:00
with patch ( ' endpoints.api.repository.tuf_metadata_api ' ) as mock_tuf :
2017-07-24 15:05:15 +00:00
with patch (
' endpoints.api.repository_models_pre_oci.model.repository.get_repository ' ) as mock_model :
2017-07-21 18:04:59 +00:00
mock_model . return_value = MagicMock ( ) if repo_found else None
2017-05-01 19:51:54 +00:00
mock_tuf . get_default_tags_with_expiration . return_value = [ ' tags ' , ' expiration ' ]
2017-04-15 12:26:33 +00:00
with client_with_identity ( ' devtable ' , client ) as cl :
params = { ' repository ' : ' devtable/repo ' }
request_body = { ' trust_enabled ' : trust_enabled }
2017-07-24 15:05:15 +00:00
assert expected_body == conduct_api_call ( cl , RepositoryTrust , ' POST ' , params , request_body ,
expected_status ) . json
2017-04-19 16:27:01 +00:00
def test_signing_disabled ( client ) :
with patch ( ' features.SIGNING ' , FeatureNameValue ( ' SIGNING ' , False ) ) :
with client_with_identity ( ' devtable ' , client ) as cl :
params = { ' repository ' : ' devtable/simple ' }
response = conduct_api_call ( cl , Repository , ' GET ' , params ) . json
assert not response [ ' trust_enabled ' ]
2017-06-28 08:38:36 +00:00
2017-05-02 17:14:30 +00:00
def test_sni_support ( ) :
import ssl
assert ssl . HAS_SNI