authentik.blueprints.tests.test_v1_tasks
Test blueprints v1 tasks
1"""Test blueprints v1 tasks""" 2 3from hashlib import sha512 4from tempfile import NamedTemporaryFile, mkdtemp 5 6from django.test import TransactionTestCase 7from yaml import dump 8 9from authentik.blueprints.models import BlueprintInstance, BlueprintInstanceStatus 10from authentik.blueprints.v1.tasks import apply_blueprint, blueprints_discovery, blueprints_find 11from authentik.lib.config import CONFIG 12from authentik.lib.generators import generate_id 13 14TMP = mkdtemp("authentik-blueprints") 15 16 17class TestBlueprintsV1Tasks(TransactionTestCase): 18 """Test Blueprints v1 Tasks""" 19 20 @CONFIG.patch("blueprints_dir", TMP) 21 def test_invalid_file_syntax(self): 22 """Test syntactically invalid file""" 23 with NamedTemporaryFile(suffix=".yaml", dir=TMP) as file: 24 file.write(b"{") 25 file.flush() 26 blueprints = blueprints_find() 27 self.assertEqual(blueprints, []) 28 29 @CONFIG.patch("blueprints_dir", TMP) 30 def test_invalid_file_version(self): 31 """Test invalid file""" 32 with NamedTemporaryFile(suffix=".yaml", dir=TMP) as file: 33 file.write(b"version: 2") 34 file.flush() 35 blueprints = blueprints_find() 36 self.assertEqual(blueprints, []) 37 38 @CONFIG.patch("blueprints_dir", TMP) 39 def test_valid(self): 40 """Test valid file""" 41 blueprint_id = generate_id() 42 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 43 file.write( 44 dump( 45 { 46 "version": 1, 47 "entries": [], 48 "metadata": { 49 "name": blueprint_id, 50 }, 51 } 52 ) 53 ) 54 file.seek(0) 55 file_hash = sha512(file.read().encode()).hexdigest() 56 file.flush() 57 blueprints_discovery.send() 58 instance = BlueprintInstance.objects.filter(name=blueprint_id).first() 59 self.assertEqual(instance.last_applied_hash, file_hash) 60 self.assertEqual( 61 instance.metadata, 62 { 63 "name": blueprint_id, 64 "labels": {}, 65 }, 66 ) 67 68 @CONFIG.patch("blueprints_dir", TMP) 69 def test_valid_updated(self): 70 """Test valid file""" 71 BlueprintInstance.objects.filter(name="foo").delete() 72 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 73 file.write( 74 dump( 75 { 76 "version": 1, 77 "entries": [], 78 "metadata": { 79 "name": "foo", 80 }, 81 } 82 ) 83 ) 84 file.flush() 85 blueprints_discovery.send() 86 blueprint = BlueprintInstance.objects.filter(name="foo").first() 87 self.assertEqual( 88 blueprint.last_applied_hash, 89 ( 90 "b86ec439b3857350714f070d2833490e736d9155d3d97b2cac13f3b352223e5a" 91 "1adbf8ec56fa616d46090cc4773ff9e46c4e509fde96b97de87dd21fa329ca1a" 92 ), 93 ) 94 self.assertEqual(blueprint.metadata, {"labels": {}, "name": "foo"}) 95 file.write( 96 dump( 97 { 98 "version": 1, 99 "entries": [], 100 "metadata": { 101 "name": "foo", 102 "labels": { 103 "foo": "bar", 104 }, 105 }, 106 } 107 ) 108 ) 109 file.flush() 110 blueprints_discovery.send() 111 blueprint.refresh_from_db() 112 self.assertEqual( 113 blueprint.last_applied_hash, 114 ( 115 "87b68b10131d2c9751ed308bba38f04734b9e2cdf8532ed617bc52979b063c49" 116 "2564f33f3d20ab9d5f0fd9e6eb77a13942e060199f147789cb7afab9690e72b5" 117 ), 118 ) 119 self.assertEqual( 120 blueprint.metadata, 121 { 122 "name": "foo", 123 "labels": {"foo": "bar"}, 124 }, 125 ) 126 127 @CONFIG.patch("blueprints_dir", TMP) 128 def test_valid_disabled(self): 129 """Test valid file""" 130 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 131 file.write( 132 dump( 133 { 134 "version": 1, 135 "entries": [], 136 } 137 ) 138 ) 139 file.flush() 140 instance: BlueprintInstance = BlueprintInstance.objects.create( 141 name=generate_id(), 142 path=file.name, 143 enabled=False, 144 status=BlueprintInstanceStatus.UNKNOWN, 145 ) 146 instance.refresh_from_db() 147 self.assertEqual(instance.last_applied_hash, "") 148 self.assertEqual( 149 instance.status, 150 BlueprintInstanceStatus.UNKNOWN, 151 ) 152 apply_blueprint.send(instance.pk).get_result(block=True) 153 instance.refresh_from_db() 154 self.assertEqual(instance.last_applied_hash, "") 155 self.assertEqual( 156 instance.status, 157 BlueprintInstanceStatus.UNKNOWN, 158 )
TMP =
'/tmp/tmp6tu7odmzauthentik-blueprints'
class
TestBlueprintsV1Tasks(django.test.testcases.TransactionTestCase):
18class TestBlueprintsV1Tasks(TransactionTestCase): 19 """Test Blueprints v1 Tasks""" 20 21 @CONFIG.patch("blueprints_dir", TMP) 22 def test_invalid_file_syntax(self): 23 """Test syntactically invalid file""" 24 with NamedTemporaryFile(suffix=".yaml", dir=TMP) as file: 25 file.write(b"{") 26 file.flush() 27 blueprints = blueprints_find() 28 self.assertEqual(blueprints, []) 29 30 @CONFIG.patch("blueprints_dir", TMP) 31 def test_invalid_file_version(self): 32 """Test invalid file""" 33 with NamedTemporaryFile(suffix=".yaml", dir=TMP) as file: 34 file.write(b"version: 2") 35 file.flush() 36 blueprints = blueprints_find() 37 self.assertEqual(blueprints, []) 38 39 @CONFIG.patch("blueprints_dir", TMP) 40 def test_valid(self): 41 """Test valid file""" 42 blueprint_id = generate_id() 43 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 44 file.write( 45 dump( 46 { 47 "version": 1, 48 "entries": [], 49 "metadata": { 50 "name": blueprint_id, 51 }, 52 } 53 ) 54 ) 55 file.seek(0) 56 file_hash = sha512(file.read().encode()).hexdigest() 57 file.flush() 58 blueprints_discovery.send() 59 instance = BlueprintInstance.objects.filter(name=blueprint_id).first() 60 self.assertEqual(instance.last_applied_hash, file_hash) 61 self.assertEqual( 62 instance.metadata, 63 { 64 "name": blueprint_id, 65 "labels": {}, 66 }, 67 ) 68 69 @CONFIG.patch("blueprints_dir", TMP) 70 def test_valid_updated(self): 71 """Test valid file""" 72 BlueprintInstance.objects.filter(name="foo").delete() 73 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 74 file.write( 75 dump( 76 { 77 "version": 1, 78 "entries": [], 79 "metadata": { 80 "name": "foo", 81 }, 82 } 83 ) 84 ) 85 file.flush() 86 blueprints_discovery.send() 87 blueprint = BlueprintInstance.objects.filter(name="foo").first() 88 self.assertEqual( 89 blueprint.last_applied_hash, 90 ( 91 "b86ec439b3857350714f070d2833490e736d9155d3d97b2cac13f3b352223e5a" 92 "1adbf8ec56fa616d46090cc4773ff9e46c4e509fde96b97de87dd21fa329ca1a" 93 ), 94 ) 95 self.assertEqual(blueprint.metadata, {"labels": {}, "name": "foo"}) 96 file.write( 97 dump( 98 { 99 "version": 1, 100 "entries": [], 101 "metadata": { 102 "name": "foo", 103 "labels": { 104 "foo": "bar", 105 }, 106 }, 107 } 108 ) 109 ) 110 file.flush() 111 blueprints_discovery.send() 112 blueprint.refresh_from_db() 113 self.assertEqual( 114 blueprint.last_applied_hash, 115 ( 116 "87b68b10131d2c9751ed308bba38f04734b9e2cdf8532ed617bc52979b063c49" 117 "2564f33f3d20ab9d5f0fd9e6eb77a13942e060199f147789cb7afab9690e72b5" 118 ), 119 ) 120 self.assertEqual( 121 blueprint.metadata, 122 { 123 "name": "foo", 124 "labels": {"foo": "bar"}, 125 }, 126 ) 127 128 @CONFIG.patch("blueprints_dir", TMP) 129 def test_valid_disabled(self): 130 """Test valid file""" 131 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 132 file.write( 133 dump( 134 { 135 "version": 1, 136 "entries": [], 137 } 138 ) 139 ) 140 file.flush() 141 instance: BlueprintInstance = BlueprintInstance.objects.create( 142 name=generate_id(), 143 path=file.name, 144 enabled=False, 145 status=BlueprintInstanceStatus.UNKNOWN, 146 ) 147 instance.refresh_from_db() 148 self.assertEqual(instance.last_applied_hash, "") 149 self.assertEqual( 150 instance.status, 151 BlueprintInstanceStatus.UNKNOWN, 152 ) 153 apply_blueprint.send(instance.pk).get_result(block=True) 154 instance.refresh_from_db() 155 self.assertEqual(instance.last_applied_hash, "") 156 self.assertEqual( 157 instance.status, 158 BlueprintInstanceStatus.UNKNOWN, 159 )
Test Blueprints v1 Tasks
@CONFIG.patch('blueprints_dir', TMP)
def
test_invalid_file_syntax(self):
21 @CONFIG.patch("blueprints_dir", TMP) 22 def test_invalid_file_syntax(self): 23 """Test syntactically invalid file""" 24 with NamedTemporaryFile(suffix=".yaml", dir=TMP) as file: 25 file.write(b"{") 26 file.flush() 27 blueprints = blueprints_find() 28 self.assertEqual(blueprints, [])
Test syntactically invalid file
@CONFIG.patch('blueprints_dir', TMP)
def
test_invalid_file_version(self):
30 @CONFIG.patch("blueprints_dir", TMP) 31 def test_invalid_file_version(self): 32 """Test invalid file""" 33 with NamedTemporaryFile(suffix=".yaml", dir=TMP) as file: 34 file.write(b"version: 2") 35 file.flush() 36 blueprints = blueprints_find() 37 self.assertEqual(blueprints, [])
Test invalid file
@CONFIG.patch('blueprints_dir', TMP)
def
test_valid(self):
39 @CONFIG.patch("blueprints_dir", TMP) 40 def test_valid(self): 41 """Test valid file""" 42 blueprint_id = generate_id() 43 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 44 file.write( 45 dump( 46 { 47 "version": 1, 48 "entries": [], 49 "metadata": { 50 "name": blueprint_id, 51 }, 52 } 53 ) 54 ) 55 file.seek(0) 56 file_hash = sha512(file.read().encode()).hexdigest() 57 file.flush() 58 blueprints_discovery.send() 59 instance = BlueprintInstance.objects.filter(name=blueprint_id).first() 60 self.assertEqual(instance.last_applied_hash, file_hash) 61 self.assertEqual( 62 instance.metadata, 63 { 64 "name": blueprint_id, 65 "labels": {}, 66 }, 67 )
Test valid file
@CONFIG.patch('blueprints_dir', TMP)
def
test_valid_updated(self):
69 @CONFIG.patch("blueprints_dir", TMP) 70 def test_valid_updated(self): 71 """Test valid file""" 72 BlueprintInstance.objects.filter(name="foo").delete() 73 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 74 file.write( 75 dump( 76 { 77 "version": 1, 78 "entries": [], 79 "metadata": { 80 "name": "foo", 81 }, 82 } 83 ) 84 ) 85 file.flush() 86 blueprints_discovery.send() 87 blueprint = BlueprintInstance.objects.filter(name="foo").first() 88 self.assertEqual( 89 blueprint.last_applied_hash, 90 ( 91 "b86ec439b3857350714f070d2833490e736d9155d3d97b2cac13f3b352223e5a" 92 "1adbf8ec56fa616d46090cc4773ff9e46c4e509fde96b97de87dd21fa329ca1a" 93 ), 94 ) 95 self.assertEqual(blueprint.metadata, {"labels": {}, "name": "foo"}) 96 file.write( 97 dump( 98 { 99 "version": 1, 100 "entries": [], 101 "metadata": { 102 "name": "foo", 103 "labels": { 104 "foo": "bar", 105 }, 106 }, 107 } 108 ) 109 ) 110 file.flush() 111 blueprints_discovery.send() 112 blueprint.refresh_from_db() 113 self.assertEqual( 114 blueprint.last_applied_hash, 115 ( 116 "87b68b10131d2c9751ed308bba38f04734b9e2cdf8532ed617bc52979b063c49" 117 "2564f33f3d20ab9d5f0fd9e6eb77a13942e060199f147789cb7afab9690e72b5" 118 ), 119 ) 120 self.assertEqual( 121 blueprint.metadata, 122 { 123 "name": "foo", 124 "labels": {"foo": "bar"}, 125 }, 126 )
Test valid file
@CONFIG.patch('blueprints_dir', TMP)
def
test_valid_disabled(self):
128 @CONFIG.patch("blueprints_dir", TMP) 129 def test_valid_disabled(self): 130 """Test valid file""" 131 with NamedTemporaryFile(mode="w+", suffix=".yaml", dir=TMP) as file: 132 file.write( 133 dump( 134 { 135 "version": 1, 136 "entries": [], 137 } 138 ) 139 ) 140 file.flush() 141 instance: BlueprintInstance = BlueprintInstance.objects.create( 142 name=generate_id(), 143 path=file.name, 144 enabled=False, 145 status=BlueprintInstanceStatus.UNKNOWN, 146 ) 147 instance.refresh_from_db() 148 self.assertEqual(instance.last_applied_hash, "") 149 self.assertEqual( 150 instance.status, 151 BlueprintInstanceStatus.UNKNOWN, 152 ) 153 apply_blueprint.send(instance.pk).get_result(block=True) 154 instance.refresh_from_db() 155 self.assertEqual(instance.last_applied_hash, "") 156 self.assertEqual( 157 instance.status, 158 BlueprintInstanceStatus.UNKNOWN, 159 )
Test valid file