Пример #1
0
        public void MetadataObjectExcludesBlacklistedEndpoints()
        {
            var builder         = new MetaDataObjectBuilder(_serviceDefinition);
            var metaDataObjects = builder.GetMetaDataObjects();

            Assert.Empty(metaDataObjects);
        }
        public void GetRequestBodyDocForOperation()
        {
            var builder = new MetaDataObjectBuilder(_serviceDefinition);
            var checkAvailabilityPostOperation = _serviceDefinition.Paths["/subscriptions/{subscriptionId}/providers/Microsoft.Storage/checkNameAvailability"]["post"];
            var requestBody = builder.GetRequestBodyForOperation(checkAvailabilityPostOperation, true);

            Assert.NotNull(requestBody);
            Assert.Equal(2, requestBody.Count);
            Assert.Equal("\"name\": \"The storage account name.\"", requestBody.First.ToString());
            Assert.Equal("\"type\": \"The type of resource, Microsoft.Storage/storageAccounts\"", requestBody.Last.ToString());
        }
        public void IdentifyDuplicatePaths()
        {
            // these swagger operations have more than 1 version of it. ( usually because they come from different providers)
            // client will pick the last swagger definition it sees and use that.
            var knownDuplicates = new HashSet <string>();

            knownDuplicates.Add(
                "https://management.azure.com/Subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.RecoveryServices/operations");
            knownDuplicates.Add(
                "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/moveResources");

            var root             = new DirectoryInfo(Directory.GetCurrentDirectory()).Parent.Parent.Parent;
            var fileRelative     = Path.Combine("App_Data", "SwaggerSpecs");
            var swaggerDirectory = Path.Combine(root.FullName, fileRelative);
            var metadataObjects  = new List <MetadataObject>();

            foreach (var directory in Directory.GetDirectories(swaggerDirectory))
            {
                foreach (var swaggerFile in Directory.GetFiles(directory))
                {
                    var serviceDefinition = SwaggerParser.Load(swaggerFile, new FileSystem());
                    var builder           = new MetaDataObjectBuilder(serviceDefinition);
                    metadataObjects.AddRange(builder.GetMetaDataObjects());
                }
            }

            Assert.NotEmpty(metadataObjects);
            var speclessMetadataObjects = HyakUtils.GetSpeclessCsmOperations().ToList();

            Assert.NotEmpty(speclessMetadataObjects);
            metadataObjects.AddRange(speclessMetadataObjects);

            var operationsCount = new Dictionary <UniqueOperation, HashSet <string> >();

            foreach (var metadataObject in metadataObjects)
            {
                var uniqueOperation = new UniqueOperation(metadataObject.Url, metadataObject.HttpMethod);
                if (!operationsCount.ContainsKey(uniqueOperation))
                {
                    operationsCount[uniqueOperation] = new HashSet <string>(StringComparer.OrdinalIgnoreCase);
                }
                operationsCount[uniqueOperation].Add(metadataObject.ApiVersion);
            }
            foreach (var oCount in operationsCount)
            {
                if (oCount.Value.Count > 1)
                {
                    Assert.True(knownDuplicates.Contains(oCount.Key.Url));
                }
            }
        }
        public void VerifyMetadataObject()
        {
            var builder         = new MetaDataObjectBuilder(_serviceDefinition);
            var metaDataObjects = builder.GetMetaDataObjects();
            var metadataObjects = metaDataObjects as IList <MetadataObject> ?? metaDataObjects.ToArray();
            var metadataObject  = metadataObjects[3];

            Assert.Equal("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}",
                         metadataObject.Url.Replace("https://", string.Empty));
            Assert.Equal("DELETE", metadataObject.HttpMethod);
            Assert.Equal("Delete", metadataObject.MethodName);
            Assert.Equal("2017-06-01", metadataObject.ApiVersion);
            Assert.Null(metadataObject.RequestBody);
            Assert.Null(metadataObject.RequestBodyDoc);
        }
Пример #5
0
        public void GetRequestBodyDocForOperation()
        {
            var builder = new MetaDataObjectBuilder(_serviceDefinition);
            var putRouteTableOperation = _serviceDefinition.Paths["/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeTables/{routeTableName}"]["put"];
            var requestBodyDoc         = builder.GetRequestBodyForOperation(putRouteTableOperation, true);

            Assert.NotNull(requestBodyDoc);
            Assert.Equal(7, requestBodyDoc.Count);
            Assert.Equal("Resource ID.", requestBodyDoc.GetValue("id").ToString());
            Assert.Equal("Resource name.", requestBodyDoc.GetValue("name"));
            Assert.Equal("Resource type.", requestBodyDoc.GetValue("type"));
            Assert.Equal("Resource location.", requestBodyDoc.GetValue("location"));
            Assert.False(requestBodyDoc.GetValue("tags").HasValues);
            Assert.Equal("Gets a unique read-only string that changes whenever the resource is updated.", requestBodyDoc.GetValue("etag"));
        }
Пример #6
0
        public void VerifyMetadataObject()
        {
            var builder         = new MetaDataObjectBuilder(_serviceDefinition);
            var metaDataObjects = builder.GetMetaDataObjects();
            var metadataObjects = metaDataObjects as IList <MetadataObject> ?? metaDataObjects.ToArray();
            var metadataObject  = metadataObjects[7];

            Assert.Equal("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeTables/{routeTableName}/routes/{routeName}",
                         metadataObject.Url.Replace("https://", string.Empty));
            Assert.Equal("PUT", metadataObject.HttpMethod);
            Assert.Equal("CreateOrUpdate", metadataObject.MethodName);
            Assert.Equal("2017-03-01", metadataObject.ApiVersion);
            Assert.NotNull(metadataObject.RequestBody);
            Assert.NotNull(metadataObject.RequestBodyDoc);
        }
Пример #7
0
        public void VerifyUrlsInMetadataObject()
        {
            var builder         = new MetaDataObjectBuilder(_serviceDefinition);
            var metaDataObjects = builder.GetMetaDataObjects();
            var metadataObjects = metaDataObjects as IList <MetadataObject> ?? metaDataObjects.ToList();

            Assert.Equal(9, metadataObjects.Count);
            var urls = metadataObjects.Select(metaDataObject => metaDataObject.Url.Replace("https://", string.Empty)).ToList();

            Assert.Equal(3, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeTables/{routeTableName}")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeTables")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Network/routeTables")));
            Assert.Equal(3, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeTables/{routeTableName}/routes/{routeName}")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeTables/{routeTableName}/routes")));
        }
Пример #8
0
        public void ApiVersionInPathOverridesApiVersionInSwaggerRoot()
        {
            var resourceRoot      = new DirectoryInfo(Directory.GetCurrentDirectory()).Parent.Parent;
            var filePath          = Path.Combine(resourceRoot.FullName, Path.Combine("Resource", "arm-network", "2017-03-01", "swagger", "vmssNetworkInterface.json"));
            var serviceDefinition = SwaggerParser.Load(filePath, new FileSystem());

            Assert.Equal("2017-03-01", serviceDefinition.Info.Version);

            var builder         = new MetaDataObjectBuilder(serviceDefinition);
            var metaDataObjects = builder.GetMetaDataObjects();

            Assert.Equal(3, metaDataObjects.Count());
            foreach (var metaDataObject in metaDataObjects)
            {
                Assert.Equal("2016-09-01", metaDataObject.ApiVersion);
            }
        }
        public void VerifyUrlsInMetadataObject()
        {
            var builder         = new MetaDataObjectBuilder(_serviceDefinition);
            var metaDataObjects = builder.GetMetaDataObjects();
            var metadataObjects = metaDataObjects as IList <MetadataObject> ?? metaDataObjects.ToList();

            Assert.Equal(13, metadataObjects.Count);
            var urls = metadataObjects.Select(metaDataObject => metaDataObject.Url.Replace("https://", string.Empty)).ToList();

            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/providers/Microsoft.Storage/operations")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Storage/checkNameAvailability")));
            Assert.Equal(4, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Storage/storageAccounts")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/regenerateKey")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListAccountSas")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListServiceSas")));
            Assert.Equal(1, urls.Count(url => url.Equals("management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Storage/usages")));
        }
Пример #10
0
        public void GetRequestBodyForOperation()
        {
            var builder = new MetaDataObjectBuilder(_serviceDefinition);
            var putRouteTableOperation = _serviceDefinition.Paths["/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeTables/{routeTableName}"]["put"];
            var requestBody            = builder.GetRequestBodyForOperation(putRouteTableOperation, false);

            Assert.NotNull(requestBody);
            Assert.Equal(7, requestBody.Count);
            Assert.Equal("(String)", requestBody.GetValue("id"));
            Assert.Equal("(String)", requestBody.GetValue("name"));
            Assert.Equal("(String)", requestBody.GetValue("type"));
            Assert.Equal("(String)", requestBody.GetValue("location"));
            Assert.False(requestBody.GetValue("tags").HasValues);
            Assert.Equal("(String)", requestBody.GetValue("etag"));
            var propertiesKey = requestBody.GetValue("properties");

            Assert.Equal("properties", propertiesKey.Path);
            Assert.Equal(3, propertiesKey.Children().Count());
            Assert.Equal("properties.routes", propertiesKey.First.Path);
            Assert.Equal(JTokenType.Array, propertiesKey.First.First.Type);
            Assert.Equal("properties.routes[0].id", propertiesKey.First.First.First.First.Path);
            Assert.Equal("properties.provisioningState", propertiesKey.Last.Path);
        }