blob: a2ccb31e012ae0945cb7c023b321a3d384a0bbad [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace Apache.Ignite.Tests.Sql;
using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using Ignite.Sql;
using NUnit.Framework;
public class IgniteDbConnectionStringBuilderTests
{
[Test]
public void TestParseFullConnectionString()
{
var connStr =
"Endpoints=localhost:10800,localhost:10801;SocketTimeout=00:00:02.5000000;OperationTimeout=00:01:14.0700000;" +
"HeartbeatInterval=00:00:01.3640000;ReconnectInterval=00:00:00.5432100;SslEnabled=True;Username=user1;Password=hunter2";
var builder = new IgniteDbConnectionStringBuilder(connStr);
CollectionAssert.AreEquivalent(new[] {"localhost:10800", "localhost:10801"}, builder.Endpoints);
Assert.AreEqual(TimeSpan.FromSeconds(2.5), builder.SocketTimeout);
Assert.AreEqual(TimeSpan.FromMinutes(1.2345), builder.OperationTimeout);
Assert.AreEqual(TimeSpan.FromSeconds(1.364), builder.HeartbeatInterval);
Assert.AreEqual(TimeSpan.FromSeconds(0.54321), builder.ReconnectInterval);
Assert.IsTrue(builder.SslEnabled);
Assert.AreEqual("user1", builder.Username);
Assert.AreEqual("hunter2", builder.Password);
Assert.AreEqual(connStr.ToLowerInvariant(), builder.ToString().ToLowerInvariant());
IgniteClientConfiguration clientConfig = builder.ToIgniteClientConfiguration();
CollectionAssert.AreEquivalent(new[] {"localhost:10800", "localhost:10801"}, clientConfig.Endpoints);
Assert.AreEqual(TimeSpan.FromSeconds(2.5), clientConfig.SocketTimeout);
Assert.AreEqual(TimeSpan.FromMinutes(1.2345), clientConfig.OperationTimeout);
Assert.AreEqual(TimeSpan.FromSeconds(1.364), clientConfig.HeartbeatInterval);
Assert.AreEqual(TimeSpan.FromSeconds(0.54321), clientConfig.ReconnectInterval);
Assert.IsNotNull(clientConfig.SslStreamFactory);
Assert.AreEqual("user1", ((BasicAuthenticator)clientConfig.Authenticator!).Username);
Assert.AreEqual("hunter2", ((BasicAuthenticator)clientConfig.Authenticator!).Password);
}
[Test]
public void TestParseMinimalConnectionString()
{
var connStr = "endpoints=foobar:1234";
var builder = new IgniteDbConnectionStringBuilder(connStr);
CollectionAssert.AreEquivalent(new[] {"foobar:1234"}, builder.Endpoints);
Assert.AreEqual(IgniteClientConfiguration.DefaultSocketTimeout, builder.SocketTimeout);
Assert.AreEqual(IgniteClientConfiguration.DefaultOperationTimeout, builder.OperationTimeout);
Assert.AreEqual(IgniteClientConfiguration.DefaultHeartbeatInterval, builder.HeartbeatInterval);
Assert.AreEqual(IgniteClientConfiguration.DefaultReconnectInterval, builder.ReconnectInterval);
Assert.IsFalse(builder.SslEnabled);
Assert.IsNull(builder.Username);
Assert.IsNull(builder.Password);
Assert.AreEqual(connStr, builder.ToString());
IgniteClientConfiguration clientConfig = builder.ToIgniteClientConfiguration();
CollectionAssert.AreEquivalent(new[] {"foobar:1234"}, clientConfig.Endpoints);
Assert.AreEqual(IgniteClientConfiguration.DefaultSocketTimeout, clientConfig.SocketTimeout);
Assert.AreEqual(IgniteClientConfiguration.DefaultOperationTimeout, clientConfig.OperationTimeout);
Assert.AreEqual(IgniteClientConfiguration.DefaultHeartbeatInterval, clientConfig.HeartbeatInterval);
Assert.AreEqual(IgniteClientConfiguration.DefaultReconnectInterval, clientConfig.ReconnectInterval);
Assert.IsNull(clientConfig.SslStreamFactory);
Assert.IsNull(clientConfig.Authenticator);
}
[Test]
public void TestToStringBuildsFullConnectionString()
{
var builder = new IgniteDbConnectionStringBuilder
{
Endpoints = ["localhost:10800", "localhost:10801"],
SocketTimeout = TimeSpan.FromSeconds(2.5),
OperationTimeout = TimeSpan.FromMinutes(1.2345),
HeartbeatInterval = TimeSpan.FromSeconds(1.364),
ReconnectInterval = TimeSpan.FromSeconds(0.54321),
SslEnabled = true,
Username = "user1",
Password = "hunter2"
};
Assert.AreEqual(
"Endpoints=localhost:10800,localhost:10801;SocketTimeout=00:00:02.5000000;OperationTimeout=00:01:14.0700000;" +
"HeartbeatInterval=00:00:01.3640000;ReconnectInterval=00:00:00.5432100;SslEnabled=True;Username=user1;Password=hunter2",
builder.ToString());
}
[Test]
public void TestToStringBuildsMinimalConnectionString()
{
var builder = new IgniteDbConnectionStringBuilder
{
Endpoints = ["foo:123"]
};
Assert.AreEqual("Endpoints=foo:123", builder.ToString());
}
[Test]
public void TestBuilderHasSamePropertiesAsClientConfig()
{
var builderProps = typeof(IgniteDbConnectionStringBuilder).GetProperties();
var configProps = typeof(IgniteClientConfiguration).GetProperties();
foreach (var configProp in configProps)
{
if (configProp.Name is nameof(IgniteClientConfiguration.LoggerFactory)
or nameof(IgniteClientConfiguration.RetryPolicy)
or nameof(IgniteClientConfiguration.Authenticator)
or nameof(IgniteClientConfiguration.SslStreamFactory))
{
// Not supported yet.
continue;
}
var builderProp = builderProps.SingleOrDefault(x => x.Name == configProp.Name);
Assert.NotNull(builderProp, $"Property '{configProp.Name}' not found in IgniteDbConnectionStringBuilder");
Assert.AreEqual(configProp.PropertyType, builderProp!.PropertyType, $"Property '{configProp.Name}' type mismatch");
}
}
[Test]
[SuppressMessage("ReSharper", "ObjectCreationAsStatement", Justification = "Tests")]
public void TestUnknownConnectionStringPropertyThrows()
{
var connStr = "foo=bar;Endpoints=localhost:10800";
var ex = Assert.Throws<ArgumentException>(() => new IgniteDbConnectionStringBuilder(connStr));
Assert.AreEqual("Unknown connection string key: 'foo'. (Parameter 'keyword')", ex.Message);
}
[Test]
[SuppressMessage("ReSharper", "CollectionNeverQueried.Local", Justification = "Tests")]
public void TestUnknownSetterPropertyThrows()
{
var builder = new IgniteDbConnectionStringBuilder();
var ex = Assert.Throws<ArgumentException>(() => builder["baz"] = "bar");
Assert.AreEqual("Unknown connection string key: 'baz'. (Parameter 'keyword')", ex.Message);
}
}