Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,30 @@ public SearchCredentials SearchCredentials

private static Uri BuildBaseUriForIndex(string searchServiceName, string indexName)
{
return TypeConversion.TryParseUri(
if (searchServiceName.Length == 0)
{
throw new ArgumentException(
"Invalid search service name. Name cannot be an empty string.",
"searchServiceName");
}

if (indexName.Length == 0)
{
throw new ArgumentException("Invalid index name. Name cannot be an empty string.", "indexName");
}

Uri uri = TypeConversion.TryParseUri(
"https://" + searchServiceName + ".search.windows.net/indexes/" + indexName + "/");

if (uri == null)
{
// Parsing will still succeed for index names with weird characters.
throw new ArgumentException(
"Invalid search service name. Name contains characters that are not valid in a URL.",
"searchServiceName");
}

return uri;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,23 @@ public SearchCredentials SearchCredentials

private static Uri BuildBaseUriForService(string searchServiceName)
{
return TypeConversion.TryParseUri("https://" + searchServiceName + ".search.windows.net/");
if (searchServiceName.Length == 0)
{
throw new ArgumentException(
"Invalid search service name. Name cannot be an empty string.",
"searchServiceName");
}

Uri uri = TypeConversion.TryParseUri("https://" + searchServiceName + ".search.windows.net/");

if (uri == null)
{
throw new ArgumentException(
"Invalid search service name. Name contains characters that are not valid in a URL.",
"searchServiceName");
}

return uri;
}
}
}
68 changes: 67 additions & 1 deletion src/Search/Search.Tests/Tests/SearchIndexClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
namespace Microsoft.Azure.Search.Tests
{
using System;
using System.Globalization;
using System.Net;
using System.Net.Http;
using Microsoft.Azure.Search.Models;
using Microsoft.Azure.Search.Tests.Utilities;
using Microsoft.Rest.Azure;
Expand All @@ -31,5 +31,71 @@ public void RequestIdIsReturnedInResponse()
Assert.Equal(options.RequestId.Value.ToString("D"), countResponse.RequestId);
});
}

[Fact]
public void ConstructorThrowsForBadParameters()
{
var creds = new SearchCredentials("abc");
var searchServiceName = "abc";
var indexName = "xyz";
var handler = new HttpClientHandler();
var uri = new Uri("http://tempuri.org");
var invalidName = ")#%&/?''+&@)#*@%#";

Assert.Throws<ArgumentNullException>("credentials", () => new SearchIndexClient(credentials: null));
Assert.Throws<ArgumentNullException>(
"searchServiceName",
() => new SearchIndexClient(searchServiceName: null, indexName: indexName, credentials: creds));
Assert.Throws<ArgumentException>(
"searchServiceName",
() => new SearchIndexClient(searchServiceName: String.Empty, indexName: indexName, credentials: creds));
Assert.Throws<ArgumentException>(
"searchServiceName",
() => new SearchIndexClient(searchServiceName: invalidName, indexName: indexName, credentials: creds));
Assert.Throws<ArgumentNullException>(
"indexName",
() => new SearchIndexClient(searchServiceName, indexName: null, credentials: creds));
Assert.Throws<ArgumentException>(
"indexName",
() => new SearchIndexClient(searchServiceName, indexName: String.Empty, credentials: creds));
Assert.Throws<ArgumentNullException>(
"credentials",
() => new SearchIndexClient(searchServiceName, indexName, credentials: null));
Assert.Throws<ArgumentNullException>(
"credentials",
() => new SearchIndexClient(credentials: null, rootHandler: handler));
Assert.Throws<ArgumentNullException>(() => new SearchIndexClient(credentials: creds, rootHandler: null));
Assert.Throws<ArgumentNullException>(
"baseUri",
() => new SearchIndexClient(baseUri: null, credentials: creds));
Assert.Throws<ArgumentNullException>("credentials", () => new SearchIndexClient(uri, credentials: null));
Assert.Throws<ArgumentNullException>(
"searchServiceName",
() => new SearchIndexClient(searchServiceName: null, indexName: indexName, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentException>(
"searchServiceName",
() => new SearchIndexClient(searchServiceName: String.Empty, indexName: indexName, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentException>(
"searchServiceName",
() => new SearchIndexClient(searchServiceName: invalidName, indexName: indexName, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentNullException>(
"indexName",
() => new SearchIndexClient(searchServiceName, indexName: null, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentException>(
"indexName",
() => new SearchIndexClient(searchServiceName, indexName: String.Empty, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentNullException>(
"credentials",
() => new SearchIndexClient(searchServiceName, indexName, credentials: null, rootHandler: handler));
Assert.Throws<ArgumentNullException>(
() => new SearchIndexClient(searchServiceName, indexName, creds, rootHandler: null));
Assert.Throws<ArgumentNullException>(
"baseUri",
() => new SearchIndexClient(baseUri: null, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentNullException>(
"credentials",
() => new SearchIndexClient(uri, credentials: null, rootHandler: handler));
Assert.Throws<ArgumentNullException>(() => new SearchIndexClient(uri, creds, rootHandler: null));
}
}
}
55 changes: 54 additions & 1 deletion src/Search/Search.Tests/Tests/SearchServiceClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
namespace Microsoft.Azure.Search.Tests
{
using System;
using System.Globalization;
using System.Net;
using System.Net.Http;
using Microsoft.Azure.Search.Models;
using Microsoft.Azure.Search.Tests.Utilities;
using Microsoft.Rest.Azure;
Expand Down Expand Up @@ -57,5 +57,58 @@ public void CanGetAnIndexClientAfterUsingServiceClient()
serviceClient.Indexes.GetClient("test");
});
}

[Fact]
public void ConstructorThrowsForBadParameters()
{
var creds = new SearchCredentials("abc");
var searchServiceName = "abc";
var handler = new HttpClientHandler();
var uri = new Uri("http://tempuri.org");
var invalidName = ")#%&/?''+&@)#*@%#";

Assert.Throws<ArgumentNullException>("credentials", () => new SearchServiceClient(credentials: null));
Assert.Throws<ArgumentNullException>(
"searchServiceName",
() => new SearchServiceClient(searchServiceName: null, credentials: creds));
Assert.Throws<ArgumentException>(
"searchServiceName",
() => new SearchServiceClient(searchServiceName: String.Empty, credentials: creds));
Assert.Throws<ArgumentException>(
"searchServiceName",
() => new SearchServiceClient(searchServiceName: invalidName, credentials: creds));
Assert.Throws<ArgumentNullException>(
"credentials",
() => new SearchServiceClient(searchServiceName, credentials: null));
Assert.Throws<ArgumentNullException>(
"credentials",
() => new SearchServiceClient(credentials: null, rootHandler: handler));
Assert.Throws<ArgumentNullException>(() => new SearchServiceClient(credentials: creds, rootHandler: null));
Assert.Throws<ArgumentNullException>(
"baseUri",
() => new SearchServiceClient(baseUri: null, credentials: creds));
Assert.Throws<ArgumentNullException>("credentials", () => new SearchServiceClient(uri, credentials: null));
Assert.Throws<ArgumentNullException>(
"searchServiceName",
() => new SearchServiceClient(searchServiceName: null, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentException>(
"searchServiceName",
() => new SearchServiceClient(searchServiceName: String.Empty, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentException>(
"searchServiceName",
() => new SearchServiceClient(searchServiceName: invalidName, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentNullException>(
"credentials",
() => new SearchServiceClient(searchServiceName, credentials: null, rootHandler: handler));
Assert.Throws<ArgumentNullException>(
() => new SearchServiceClient(searchServiceName, creds, rootHandler: null));
Assert.Throws<ArgumentNullException>(
"baseUri",
() => new SearchServiceClient(baseUri: null, credentials: creds, rootHandler: handler));
Assert.Throws<ArgumentNullException>(
"credentials",
() => new SearchServiceClient(uri, credentials: null, rootHandler: handler));
Assert.Throws<ArgumentNullException>(() => new SearchServiceClient(uri, creds, rootHandler: null));
}
}
}