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); }
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")); }
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); }
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"))); }
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"))); }
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); }