private IInternalCluster GetCluster()
        {
            var cluster  = Mock.Of <IInternalCluster>();
            var config   = GetConfig();
            var metadata = new Metadata(config)
            {
                ControlConnection = Mock.Of <IControlConnection>()
            };
            var contactPoint = new HostnameContactPoint(
                config.DnsResolver,
                config.ProtocolOptions,
                config.ServerNameResolver,
                config.KeepContactPointsUnresolved,
                "localhost");
            var connectionEndPoint = new ConnectionEndPoint(
                new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9011), config.ServerNameResolver, contactPoint);

            Mock.Get(metadata.ControlConnection).SetupGet(cc => cc.ProtocolVersion).Returns(ProtocolVersion.V4);
            Mock.Get(metadata.ControlConnection).SetupGet(cc => cc.EndPoint).Returns(connectionEndPoint);
            Mock.Get(metadata.ControlConnection).SetupGet(cc => cc.LocalAddress).Returns(new IPEndPoint(IPAddress.Parse("10.10.10.2"), 9015));
            var hostIp = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9042);

            metadata.SetResolvedContactPoints(new Dictionary <IContactPoint, IEnumerable <IConnectionEndPoint> >
            {
                { contactPoint, new [] { connectionEndPoint } }
            });
            metadata.AddHost(hostIp);
            metadata.Hosts.ToCollection().First().Datacenter = "dc123";
            Mock.Get(cluster).SetupGet(m => m.Configuration).Returns(config);
            Mock.Get(cluster).SetupGet(m => m.Metadata).Returns(metadata);
            Mock.Get(cluster).Setup(c => c.AllHosts()).Returns(metadata.AllHosts);
            return(cluster);
        }
Пример #2
0
        public IEnumerable <IContactPoint> ParseContactPoints(IEnumerable <object> providedContactPoints)
        {
            var result = new HashSet <IContactPoint>();

            foreach (var contactPoint in providedContactPoints)
            {
                IContactPoint parsedContactPoint;

                switch (contactPoint)
                {
                case IContactPoint typedContactPoint:
                    parsedContactPoint = typedContactPoint;
                    break;

                case IPEndPoint ipEndPointContactPoint:
                    parsedContactPoint = new IpLiteralContactPoint(ipEndPointContactPoint, _serverNameResolver);
                    break;

                case IPAddress ipAddressContactPoint:
                    parsedContactPoint = new IpLiteralContactPoint(ipAddressContactPoint, _protocolOptions, _serverNameResolver);
                    break;

                case string contactPointText:
                {
                    if (IPAddress.TryParse(contactPointText, out var ipAddress))
                    {
                        parsedContactPoint = new IpLiteralContactPoint(ipAddress, _protocolOptions, _serverNameResolver);
                    }
                    else
                    {
                        parsedContactPoint = new HostnameContactPoint(
                            _dnsResolver,
                            _protocolOptions,
                            _serverNameResolver,
                            _keepContactPointsUnresolved,
                            contactPointText);
                    }

                    break;
                }

                default:
                    throw new InvalidOperationException("Contact points should be either string or IPEndPoint instances");
                }

                if (result.Contains(parsedContactPoint))
                {
                    Cluster.Logger.Warning("Found duplicate contact point: {0}. Ignoring it.", contactPoint.ToString());
                    continue;
                }

                result.Add(parsedContactPoint);
            }

            return(result);
        }