def test_compare_plan_entity_bytes(): EntityTest3Appgate = load_test_open_api_spec( secrets_key=None, reload=True).entities['EntityTest3Appgate'].cls # fieldOne is writeOnly :: byte # fieldTwo is readOnly :: checksum of fieldOne # fieldThree is readOnly :: size of fieldOne e_data = { 'id': '6a01c585-c192-475b-b86f-0e632ada6769', # Current data always has ids 'name': 'entity1', 'fieldOne': None, 'fieldTwo': SHA256_FILE, 'fieldThree': 1563, } entities_current = EntitiesSet( {EntityWrapper(APPGATE_LOADER.load(e_data, None, EntityTest3Appgate))}) e_data = { 'name': 'entity1', 'fieldOne': BASE64_FILE_W0, 'fieldTwo': None, 'fieldThree': None, } e_metadata = {'uuid': '6a01c585-c192-475b-b86f-0e632ada6769'} entities_expected = EntitiesSet({ EntityWrapper(K8S_LOADER.load(e_data, e_metadata, EntityTest3Appgate)) }) plan = compare_entities(entities_current, entities_expected, BUILTIN_TAGS) assert plan.modify.entities == frozenset() assert plan.modifications_diff == {} assert compute_diff( list(entities_current.entities)[0], list(entities_expected.entities)[0]) == [] # Let's change the bytes e_data = { 'name': 'entity1', 'fieldOne': 'Some other content', 'fieldTwo': None, 'fieldThree': None, } new_e = K8S_LOADER.load(e_data, e_metadata, EntityTest3Appgate) entities_expected = EntitiesSet({EntityWrapper(new_e)}) plan = compare_entities(entities_current, entities_expected, BUILTIN_TAGS) assert plan.modify.entities == frozenset({EntityWrapper(new_e)}) assert plan.modifications_diff == { 'entity1': [ '--- \n', '+++ \n', '@@ -2,4 +2,4 @@\n', ' "name": "entity1",\n', '- "fieldTwo": "0d373afdccb82399b29ba0d6d1a282b4d10d7e70d948257e75c05999f0be9f3e",\n', '- "fieldThree": 1563\n', '+ "fieldTwo": "c8f4fc85b689f8f3a70e7024e2bb8c7c8f4f7f9ffd2a1a8d01fc8fba74d1af34",\n', '+ "fieldThree": 12\n', ' }' ] }
def test_compare_policies_2(): current_policies = EntitiesSet({ EntityWrapper( Policy(id='id1', name='policy1', expression='expression-1')), EntityWrapper( Policy(id='id2', name='policy2', expression='expression-2')), EntityWrapper( Policy(id='id3', name='policy3', expression='expression-3')) }) expected_policies = EntitiesSet({ EntityWrapper( Policy(id='id1', name='policy1', expression='expression-1')), EntityWrapper( Policy(id='id2', name='policy2', expression='expression-2')), EntityWrapper( Policy(id='id3', name='policy3', expression='expression-3')) }) plan = compare_entities(current_policies, expected_policies, BUILTIN_TAGS) assert plan.modify.entities == set() assert plan.delete.entities == set() assert plan.create.entities == set() assert plan.share.entities == { EntityWrapper( Policy(id='id1', name='policy1', expression='expression-1')), EntityWrapper( Policy(id='id2', name='policy2', expression='expression-2')), EntityWrapper( Policy(id='id3', name='policy3', expression='expression-3')) } share_ids = [p.id for p in plan.share.entities] assert len(list(filter(None, share_ids))) == 3 share_ids.sort() assert share_ids == ['id1', 'id2', 'id3']
def test_compare_policies_3(): current_policies = EntitiesSet({ EntityWrapper( Policy(id='id1', name='policy3', expression='expression-1')), EntityWrapper( Policy(id='id2', name='policy2', expression='expression-2')), EntityWrapper( Policy(id='id3', name='policy4', expression='expression-3')) }) expected_policies = EntitiesSet({ EntityWrapper(Policy(name='policy1', expression='expression-1')), EntityWrapper( Policy(id='id2', name='policy2', expression='expression-2')), EntityWrapper( Policy(id='id3', name='policy4', expression='expression-3')) }) plan = compare_entities(current_policies, expected_policies, BUILTIN_TAGS) assert plan.delete.entities == { EntityWrapper( Policy(id='id1', name='policy3', expression='expression-1')) } # test that the ids are propagated when modifying assert [p.id for p in plan.delete.entities] == ['id1'] assert plan.create.entities == { EntityWrapper(Policy(name='policy1', expression='expression-1')) } assert plan.modify.entities == set()
def test_compare_plan_entity_pem(): EntityCert = load_test_open_api_spec( secrets_key=None, reload=True).entities['EntityCert'].cls appgate_data = { 'name': 'c1', 'fieldOne': PEM_TEST, 'fieldTwo': { 'version': 1, 'serial': '3578', 'issuer': join_string(ISSUER), 'subject': join_string(SUBJECT), 'validFrom': '2012-08-22T05:26:54.000Z', 'validTo': '2017-08-21T05:26:54.000Z', 'fingerprint': 'Xw+1FmWBquZKEBwVg7G+vnToFKkeeooUuh6DXXj26ec=', 'certificate': join_string(CERTIFICATE_FIELD), 'subjectPublicKey': join_string(PUBKEY_FIELD), } } k8s_data = {'name': 'c1', 'fieldOne': PEM2} current_entities = EntitiesSet( {EntityWrapper(APPGATE_LOADER.load(appgate_data, None, EntityCert))}) new_e = K8S_LOADER.load(k8s_data, None, EntityCert) expected_entities = EntitiesSet({EntityWrapper(new_e)}) plan = compare_entities(current_entities, expected_entities, BUILTIN_TAGS) assert plan.modify.entities == frozenset({EntityWrapper(new_e)}) assert plan.modifications_diff == { 'c1': [ '--- \n', '+++ \n', '@@ -3,10 +3,10 @@\n', ' "fieldTwo": {\n', '- "version": 1,\n', '- "serial": "3578",\n', '+ "version": 3,\n', '+ "serial": "0",\n', ' "issuer": "[email protected], CN=Frank4DD Web CA, OU=WebCert Support, O=Frank4DD, L=Chuo-ku, ST=Tokyo, C=JP",\n', ' "subject": "CN=www.example.com, O=Frank4DD, ST=Tokyo, C=JP",\n', '- "validFrom": "2012-08-22T05:26:54.000Z",\n', '- "validTo": "2017-08-21T05:26:54.000Z",\n', '- "fingerprint": "Xw+1FmWBquZKEBwVg7G+vnToFKkeeooUuh6DXXj26ec=",\n', '- "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNFakNDQVhzQ0FnMzZNQTBHQ1NxR1NJYjNEUUVCQlFVQU1JR2JNUXN3Q1FZRFZRUUdF' 'd0pLVURFT01Bd0cKQTFVRUNCTUZWRzlyZVc4eEVEQU9CZ05WQkFjVEIwTm9kVzh0YTNVeEVUQVBCZ05WQkFvVENFWnlZVzVyTkVSRQpNUmd3RmdZRFZRUUxFdzlYWldKRFpYS' 'jBJRk4xY0hCdmNuUXhHREFXQmdOVkJBTVREMFp5WVc1ck5FUkVJRmRsCllpQkRRVEVqTUNFR0NTcUdTSWIzRFFFSkFSWVVjM1Z3Y0c5eWRFQm1jbUZ1YXpSa1pDNWpiMjB3SG' 'hjTk1USXcKT0RJeU1EVXlOalUwV2hjTk1UY3dPREl4TURVeU5qVTBXakJLTVFzd0NRWURWUVFHRXdKS1VERU9NQXdHQTFVRQpDQXdGVkc5cmVXOHhFVEFQQmdOVkJBb01DRVp' '5WVc1ck5FUkVNUmd3RmdZRFZRUUREQTkzZDNjdVpYaGhiWEJzClpTNWpiMjB3WERBTkJna3Foa2lHOXcwQkFRRUZBQU5MQURCSUFrRUFtL3hta0htRVFydXJFLzByZS9qZUZS' 'TGwKOFpQakJvcDd1TEhobmlhN2xRRy81ekR0WklVQzNSVnBxRFN3QnV3L05Ud2VHeXVQK284QUc5OEh4cXhUQndJRApBUUFCTUEwR0NTcUdTSWIzRFFFQkJRVUFBNEdCQUJTM' 'lRMdUJlVFBtY2FUYVVXL0xDQjJOWU95OEdNZHpSMW14CjhpQkl1Mkg2L0UydGlZM1JJZXZWMk9XNjFxWTIvWFJRZzdZUHh4M2ZmZVV1Z1g5RjRKL2lQbm51MXpBeHh5QnkKMl' 'ZndUt2NFNXalJGb1JrSWZJbEhYMHFWdmlNaFNsTnkyaW9GTHk3SmNQWmIrdjNmdERHeXdVcWNCaVZEb2VhMApIbitHbXhaQQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",\n', '+ "validFrom": "1901-12-13T20:45:52.000Z",\n', '+ "validTo": "2038-01-19T03:14:07.000Z",\n', '+ "fingerprint": "6b7fb51b56acaf0a8f9b9a3f8ca6737cb97821ddb830106c9fc9a14b8bfdfa36",\n', '+ "certificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHakNDQVlPZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRVUZBRENCbXpFTE1Ba0dB' 'MVVFQmhNQ1NsQXgKRGpBTUJnTlZCQWdUQlZSdmEzbHZNUkF3RGdZRFZRUUhFd2REYUhWdkxXdDFNUkV3RHdZRFZRUUtFd2hHY21GdQphelJFUkRFWU1CWUdBMVVFQ3hNUFYyV' 'mlRMlZ5ZENCVGRYQndiM0owTVJnd0ZnWURWUVFERXc5R2NtRnVhelJFClJDQlhaV0lnUTBFeEl6QWhCZ2txaGtpRzl3MEJDUUVXRkhOMWNIQnZjblJBWm5KaGJtczBaR1F1WT' 'I5dE1DSVkKRHpFNU1ERXhNakV6TWpBME5UVXlXaGdQTWpBek9EQXhNVGt3TXpFME1EZGFNRW94Q3pBSkJnTlZCQVlUQWtwUQpNUTR3REFZRFZRUUlEQVZVYjJ0NWJ6RVJNQTh' 'HQTFVRUNnd0lSbkpoYm1zMFJFUXhHREFXQmdOVkJBTU1EM2QzCmR5NWxlR0Z0Y0d4bExtTnZiVEJjTUEwR0NTcUdTSWIzRFFFQkFRVUFBMHNBTUVnQ1FRQ2IvR2FRZVlSQ3U2' 'c1QKL1N0NytONFZFdVh4aytNR2ludTRzZUdlSnJ1VkFiL25NTzFraFFMZEZXbW9OTEFHN0Q4MVBCNGJLNC82andBYgozd2ZHckZNSEFnTUJBQUV3RFFZSktvWklodmNOQVFFR' 'kJRQURnWUVBbnpkZVFCRzJjclhudlp5SGdDTDlkU25tCmxuYVhKSVRPLy8rRzU5dUN2REtiblgrQkt2WFh4WFFJYTdHbXR6WXV3M0xDL2pKSkwzMDdyL0NFQ1pyNnZWOUkKS0' 'huMjcreU90clBET3dURHRYeWFZT2FmOFY2ZmtTVk4zaUx4N3RiRVA2UjB1RUt4YVZhcU1aNzFlZDNTTzFPTAp3cTBqOEdrS1kvSy96bDJOd3pjPQotLS0tLUVORCBDRVJUSUZ' 'JQ0FURS0tLS0tCg==",\n', ' "subjectPublicKey": "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAJv8ZpB5hEK7qxP9K3v43hUS5' 'fGT4waKe7ix4Z4mu5UBv+cw7WSFAt0Vaag0sAbsPzU8Hhsrj/qPABvfB8asUwcCAwEAAQ=="\n' ] }
def test_compare_policies_1(): current_policies = EntitiesSet(set()) expected_policies = EntitiesSet({ EntityWrapper(Policy(name='policy1', expression='expression-1')), EntityWrapper(Policy(name='policy2', expression='expression-2')), EntityWrapper(Policy(name='policy3', expression='expression-3')) }) plan = compare_entities(current_policies, expected_policies, BUILTIN_TAGS) assert plan.create.entities == { EntityWrapper(Policy(name='policy1', expression='expression-1')), EntityWrapper(Policy(name='policy2', expression='expression-2')), EntityWrapper(Policy(name='policy3', expression='expression-3')) } assert plan.modify.entities == set() assert plan.delete.entities == set()