コード例 #1
0
        public async Task Create_already_existing_role_should_result_in_typed_exception()
        {
            // Arrange
            var config = KubernetesClientConfiguration.BuildConfigFromConfigFile();

            var client  = new k8s.Kubernetes(config);
            var wrapper = new KubernetesWrapper(client);

            var namespaceRepository = new NamespaceRepository(wrapper);
            var subjectNameSpace    = "namespace-with-role-test-" + Guid.NewGuid().ToString().Substring(0, 5);
            var awsRoleName         = "notUSed";

            var sut = new WebApi.Repositories.Kubernetes.RoleRepository(wrapper);

            try
            {
                // Act
                await namespaceRepository.CreateNamespaceAsync(subjectNameSpace, awsRoleName);

                await sut.CreateNamespaceFullAccessRole(subjectNameSpace);

                // Assert
                await Assert.ThrowsAsync <RoleAlreadyExistException>(() => sut.CreateNamespaceFullAccessRole(subjectNameSpace));
            }
            finally
            {
                client.DeleteNamespace(
                    body: new V1DeleteOptions(),
                    name: subjectNameSpace
                    );
            }
        }
コード例 #2
0
        public async Task Search_ResultsPerPageIsGreaterThanMaximum_ThrowsArgumentOutOfRangeException()
        {
            var sut = new NamespaceRepository(_requestFactory);

            await Assert.ThrowsAsync <ArgumentOutOfRangeException>(
                () => sut.Search("search", resultsPerPage: uint.MaxValue));
        }
コード例 #3
0
        public async Task Two_Namespace_Will_Create_A_Error()
        {
            // Arrange
            var namespaceName = "namespace-from-test-" + Guid.NewGuid().ToString().Substring(0, 5);
            var awsRoleName   = "awsRoleName";
            var config        = KubernetesClientConfiguration.BuildConfigFromConfigFile();
            var client        = new k8s.Kubernetes(config);

            var sut = new NamespaceRepository(new KubernetesWrapper(client));

            try
            {
                await sut.CreateNamespaceAsync(namespaceName, awsRoleName);


                // Act / Assert
                await Assert.ThrowsAsync <NamespaceAlreadyExistException>(async() =>
                                                                          await sut.CreateNamespaceAsync(namespaceName, awsRoleName));
            }
            finally
            {
                client.DeleteNamespace(
                    body: new V1DeleteOptions(),
                    name: namespaceName
                    );
            }
        }
コード例 #4
0
        public async Task A_Created_Namespace_Will_Have_the_KIAM_Annotation()
        {
            // Arrange
            var namespaceName = "namespace-from-test";
            var awsRoleName   = "awsRoleName";
            var config        = KubernetesClientConfiguration.BuildConfigFromConfigFile();
            var client        = new k8s.Kubernetes(config);

            var sut = new NamespaceRepository(client);

            try
            {
                // act
                await sut.CreateNamespaceAsync(namespaceName, awsRoleName);


                // Assert
                var namespaces = await client.ListNamespaceAsync();

                var @namespace = namespaces.Items.Single(n => n.Metadata.Name == namespaceName);


                var annotationValue = @namespace.Metadata.Annotations["iam.amazonaws.com/permitted"];

                Assert.Equal(awsRoleName, annotationValue);
            }
            finally
            {
                client.DeleteNamespace(
                    body: new V1DeleteOptions(),
                    name: namespaceName
                    );
            }
        }
コード例 #5
0
        public async Task Two_Namespace_Will_Create_A_Error()
        {
            // Arrange
            var namespaceName = "namespace-from-test";
            var awsRoleName   = "awsRoleName";
            var config        = KubernetesClientConfiguration.BuildConfigFromConfigFile();
            var client        = new k8s.Kubernetes(config);

            var sut = new NamespaceRepository(client);

            try
            {
                await sut.CreateNamespaceAsync(namespaceName, awsRoleName);


                // Act
                var ex = await Assert.ThrowsAsync <Exception>(async() =>
                                                              await sut.CreateNamespaceAsync(namespaceName, awsRoleName));

                // Assert
                var expectedStart = "Error occured while communicating with k8s:";
                Assert.StartsWith(expectedStart, ex.Message);
            }
            finally
            {
                client.DeleteNamespace(
                    body: new V1DeleteOptions(),
                    name: namespaceName
                    );
            }
        }
コード例 #6
0
 public EntitiesContext()
 {
     Namespaces = new NamespaceRepository();
     Types      = new TypeRepository();
     Classes    = new ClassRepository();
     Enums      = new EnumRepository();
 }
コード例 #7
0
        public async Task Create_A_Role_For_A_Existing_Namespace()
        {
            // Arrange
            var config = KubernetesClientConfiguration.BuildConfigFromConfigFile();

            var client  = new k8s.Kubernetes(config);
            var wrapper = new KubernetesWrapper(client);

            var namespaceRepository = new NamespaceRepository(wrapper);
            var subjectNameSpace    = "namespace-with-role-test-" + Guid.NewGuid().ToString().Substring(0, 5);
            var awsRoleName         = "notUSed";

            var sut = new WebApi.Repositories.Kubernetes.RoleRepository(wrapper);

            try
            {
                // Act
                await namespaceRepository.CreateNamespaceAsync(subjectNameSpace, awsRoleName);

                await sut.CreateNamespaceFullAccessRole(subjectNameSpace);

                // Assert
                client.ListNamespacedRole(subjectNameSpace).Items.Single();
            }
            finally
            {
                client.DeleteNamespace(
                    body: new V1DeleteOptions(),
                    name: subjectNameSpace
                    );
            }
        }
コード例 #8
0
        public async Task GetAll_ValidParameters_SetsCorrectResourceAndMethod()
        {
            var sut = new NamespaceRepository(_requestFactory);

            await sut.GetAll();

            _requestFactory.Received().Create("namespaces", Method.Get);
        }
コード例 #9
0
        public async Task Search_ValidParameters_AddsSearchParameter()
        {
            const string expected = "search";
            var          sut      = new NamespaceRepository(_requestFactory);

            await sut.Search(expected);

            _request.Received().AddParameter("search", expected);
        }
コード例 #10
0
        public async Task Search_PageIsSet_AddsPageParameter()
        {
            const uint expected = 5;
            var        sut      = new NamespaceRepository(_requestFactory);

            await sut.Search("search", expected);

            _request.Received().AddParameter("page", expected);
        }
コード例 #11
0
        public async Task GetAll_ResultsPerPageIsSet_AddsPerPageParameter()
        {
            const uint expected = 5;
            var        sut      = new NamespaceRepository(_requestFactory);

            await sut.GetAll(resultsPerPage : expected);

            _request.Received().AddParameter("per_page", expected);
        }
コード例 #12
0
        public async void CreateNamespaceSets()
        {
            var k8s           = Dummy.Of <IKubernetesWrapper>();
            var sut           = new NamespaceRepository(k8s);
            var nsName        = "ababab";
            var namespaceName = NamespaceName.Create(nsName);


            await sut.CreateNamespaceAsync(namespaceName);

            // Assert
            var mock = Mock.Get(k8s);

            mock.Verify(m => m.CreateNamespaceAsync(It.Is <V1Namespace>(ns => ns.Metadata.Name.Equals(nsName)), null, CancellationToken.None));
        }
コード例 #13
0
        /// <summary> Creates a new <see cref="GitLabClient" /> instance. </summary>
        /// <param name="hostUri"> The GitLab server to connect to. </param>
        /// <param name="privateToken"> The private token to use when making requests to the GitLab API. </param>
        public GitLabClient(Uri hostUri, string privateToken = null)
        {
            if (hostUri == null)
            {
                throw new ArgumentNullException(nameof(hostUri));
            }

            var baseUri = new Uri(hostUri, ApiPath);

            _authenticator = new PrivateTokenAuthenticator(privateToken);
            var clientFactory  = new ClientFactory(baseUri, _authenticator);
            var requestFactory = new RequestFactory(clientFactory);

            Branches        = new BranchRepository(requestFactory);
            Builds          = new BuildRepository(requestFactory);
            BuildTriggers   = new BuildTriggerRepository(requestFactory);
            BuildVariables  = new BuildVariableRepository(requestFactory);
            Commits         = new CommitRepository(requestFactory);
            DeployKeys      = new DeployKeyRepository(requestFactory);
            Emails          = new EmailRepository(requestFactory);
            Files           = new FileRepository(requestFactory);
            GitLabLicense   = new GitLabLicenseRepository(requestFactory);
            GitLabSettings  = new GitLabSettingsRepository(requestFactory);
            Issues          = new IssueRepository(requestFactory);
            Keys            = new KeyRepository(requestFactory);
            Labels          = new LabelRepository(requestFactory);
            Licenses        = new LicenseRepository(requestFactory);
            MergeRequests   = new MergeRequestRepository(requestFactory);
            Milestones      = new MilestoneRepository(requestFactory);
            Namespaces      = new NamespaceRepository(requestFactory);
            ProjectSnippets = new ProjectSnippetRepository(requestFactory);
            Repositories    = new RepositoryRepository(requestFactory);
            Runners         = new RunnerRepository(requestFactory);
            Session         = new SessionRepository(requestFactory);
            SystemHooks     = new SystemHookRepository(requestFactory);
            Tags            = new TagRepository(requestFactory);
            Users           = new UserRepository(requestFactory);
            Projects        = new ProjectRepository(requestFactory);
            ProjectMembers  = new ProjectMemberRepository(requestFactory);
            GroupMembers    = new GroupMemberRepository(requestFactory);
        }
コード例 #14
0
        public async Task AddAnnotations_will_not_override_annotations()
        {
            // Arrange
            var namespaceName =
                NamespaceName.Create("namespace-from-test-" + Guid.NewGuid().ToString().Substring(0, 5));


            var config = KubernetesClientConfiguration.BuildConfigFromConfigFile();
            var client = new k8s.Kubernetes(config);

            var sut = new NamespaceRepository(client);

            try
            {
                await sut.CreateNamespaceAsync(namespaceName);

                var annotationsRoundOne = new Dictionary <string, string>
                {
                    { "type-a", "ab" },
                    { "type-b", "bc" }
                };

                await sut.AddAnnotations(namespaceName, annotationsRoundOne);

                var annotationsRoundTwo = new Dictionary <string, string>
                {
                    { "type-a", "not ab" }
                };

                // Act / Assert
                Assert.ThrowsAsync <Exception>(async() => await sut.AddAnnotations(namespaceName, annotationsRoundTwo));
            }
            finally
            {
                client.DeleteNamespace(
                    body: new V1DeleteOptions(),
                    name: namespaceName
                    );
            }
        }
コード例 #15
0
        public async Task AddAnnotations_can_add_annotations_when_none_exits()
        {
            var namespaceName =
                NamespaceName.Create("namespace-from-test-" + Guid.NewGuid().ToString().Substring(0, 5));


            var config = KubernetesClientConfiguration.BuildConfigFromConfigFile();
            var client = new k8s.Kubernetes(config);

            var sut = new NamespaceRepository(client);

            try
            {
                await sut.CreateNamespaceAsync(namespaceName);

                var annotations = new Dictionary <string, string>
                {
                    { "type-a", "ab" },
                    { "type-b", "bc" }
                };

                // Act
                await sut.AddAnnotations(namespaceName, annotations);


                // Assert
                var resultNamespace = client.ReadNamespace(namespaceName);

                var resultAnnotations = resultNamespace.Metadata.Annotations;

                Assert.Equal(annotations, resultAnnotations);
            }
            finally
            {
                client.DeleteNamespace(
                    body: new V1DeleteOptions(),
                    name: namespaceName
                    );
            }
        }
コード例 #16
0
        public async Task Bind_To_A_Existing_Namespace()
        {
            var config = KubernetesClientConfiguration.BuildConfigFromConfigFile();

            var client              = new k8s.Kubernetes(config);
            var wrapper             = new KubernetesWrapper(client);
            var namespaceRepository = new NamespaceRepository(wrapper);
            var roleRepository      = new WebApi.Repositories.Kubernetes.RoleRepository(wrapper);
            var sut = new WebApi.Repositories.Kubernetes.RoleBindingRepository(wrapper);

            var subjectNameSpace = "namespace-with-role-test-" + Guid.NewGuid().ToString().Substring(0, 5);
            var awsRoleName      = "notUSed";
            var groupName        = "a-test-group";

            try
            {
                await namespaceRepository.CreateNamespaceAsync(subjectNameSpace, awsRoleName);

                var roleName = await roleRepository.CreateNamespaceFullAccessRole(subjectNameSpace);

                // Act
                await sut.BindNamespaceRoleToGroup(
                    subjectNameSpace,
                    roleName,
                    groupName
                    );

                // Assert
                var roleBindings = await client.ListNamespacedRoleBindingAsync(subjectNameSpace);

                roleBindings.Items.Single();
            }
            finally
            {
                client.DeleteNamespace(
                    body: new V1DeleteOptions(),
                    name: subjectNameSpace
                    );
            }
        }
コード例 #17
0
        public async Task Search_SearchIsNull_ThrowsArgumentNullException()
        {
            var sut = new NamespaceRepository(_requestFactory);

            await Assert.ThrowsAsync <ArgumentNullException>(() => sut.Search(null));
        }
コード例 #18
0
        public async Task GetAll_ResultsPerPageIsLessThanMinimum_ThrowsArgumentOutOfRangeException()
        {
            var sut = new NamespaceRepository(_requestFactory);

            await Assert.ThrowsAsync <ArgumentOutOfRangeException>(() => sut.GetAll(resultsPerPage: uint.MinValue));
        }
コード例 #19
0
        public async Task Search_PageIsLessThanMinimum_ThrowsArgumentOutOfRangeException()
        {
            var sut = new NamespaceRepository(_requestFactory);

            await Assert.ThrowsAsync <ArgumentOutOfRangeException>(() => sut.Search("search", uint.MinValue));
        }