public void GetShouldReturnDefaultAzureServiceGivenDefaultCatalog()
        {
            // given
            ExtensionServiceProvider provider = ExtensionServiceProvider.Create(new Assembly[]
            {
                typeof(IAccountManager).Assembly,
                typeof(IAzureResourceManager).Assembly
            });
            var serverDefinition = new ServerDefinition("sqlserver", "azure");

            // when I query each provider
            IServerDiscoveryProvider serverDiscoveryProvider = ExtensionUtils.GetService <IServerDiscoveryProvider>(provider, serverDefinition);

            // Then I get a valid provider back
            Assert.NotNull(serverDiscoveryProvider);
            Assert.True(serverDiscoveryProvider is AzureSqlServerDiscoveryProvider);

            IDatabaseDiscoveryProvider databaseDiscoveryProvider =
                ExtensionUtils.GetService <IDatabaseDiscoveryProvider>(provider, serverDefinition);

            // TODO Verify account manager is detected as soon as the account manager has a real implementation
            //IAccountManager accountManager = ((AzureSqlServerDiscoveryProvider)serverDiscoveryProvider).AccountManager;
            //Assert.NotNull(accountManager);
            //Assert.True(accountManager is IAzureAuthenticationManager);

            Assert.NotNull(databaseDiscoveryProvider);
            Assert.True(databaseDiscoveryProvider is AzureDatabaseDiscoveryProvider);
        }
 public SerializationServiceTests()
 {
     HostMock = new Mock<IProtocolEndpoint>();
     ServiceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();
     HostLoader.InitializeHostedServices(ServiceProvider, HostMock.Object);
     SerializationService = ServiceProvider.GetService<SerializationService>();
 }
Esempio n. 3
0
        private static void InitializeRequestHandlersAndServices(ServiceHost serviceHost, SqlToolsContext sqlToolsContext)
        {
            // Load extension provider, which currently finds all exports in current DLL. Can be changed to find based
            // on directory or assembly list quite easily in the future
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();

            serviceProvider.RegisterSingleService(sqlToolsContext);
            serviceProvider.RegisterSingleService(serviceHost);

            // Initialize and register singleton services so they're accessible for any MEF service. In the future, these
            // could be updated to be IComposableServices, which would avoid the requirement to define a singleton instance
            // and instead have MEF handle discovery & loading
            WorkspaceService <SqlToolsSettings> .Instance.InitializeService(serviceHost);

            serviceProvider.RegisterSingleService(WorkspaceService <SqlToolsSettings> .Instance);

            LanguageService.Instance.InitializeService(serviceHost, sqlToolsContext);
            serviceProvider.RegisterSingleService(LanguageService.Instance);

            ConnectionService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ConnectionService.Instance);

            CredentialService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(CredentialService.Instance);

            QueryExecutionService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(QueryExecutionService.Instance);

            InitializeHostedServices(serviceProvider, serviceHost);

            serviceHost.InitializeRequestHandlers();
        }
        /// <summary>
        /// Constructs a new service host intended to be used as a JSON RPC server. StdIn is used
        /// for receiving messages, StdOut is used for sending messages. Services will be
        /// discovered from the assemblies in the current directory listed in
        /// <paramref name="assembliesToInclude"/>
        /// </summary>
        /// <param name="directory">Directory to include assemblies from</param>
        /// <param name="assembliesToInclude">
        /// List of assembly names in the current directory to search for service exports
        /// </param>
        /// <returns>Service host as a JSON RPC server over StdI/O</returns>
        public static ExtensibleServiceHost CreateDefaultExtensibleServer(string directory, IList <string> assembliesToInclude)
        {
            Validate.IsNotNull(nameof(assembliesToInclude), assembliesToInclude);

            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateFromAssembliesInDirectory(directory, assembliesToInclude);

            return(new ExtensibleServiceHost(serviceProvider, new StdioServerChannel()));
        }
Esempio n. 5
0
 public FormatterUnitTestsBase()
 {
     HostMock             = new Mock <IProtocolEndpoint>();
     WorkspaceServiceMock = new Mock <WorkspaceService <SqlToolsSettings> >();
     ServiceProvider      = ExtensionServiceProvider.CreateDefaultServiceProvider();
     ServiceProvider.RegisterSingleService(WorkspaceServiceMock.Object);
     HostLoader.InitializeHostedServices(ServiceProvider, HostMock.Object);
     FormatterService = ServiceProvider.GetService <TSqlFormatterService>();
 }
        public void CreateDefaultServiceProviderShouldFindTypesInAllKnownAssemblies()
        {
            // Given a default ExtensionServiceProvider
            // Then we should not find exports from a test assembly
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();

            Assert.Empty(serviceProvider.GetServices <MyExportType>());

            // But should find exports that are defined in the main assembly
            Assert.NotEmpty(serviceProvider.GetServices <ASTNodeFormatterFactory>());
        }
Esempio n. 7
0
 public ResourceProviderServiceTests()
 {
     HostMock = new Mock <IProtocolEndpoint>();
     AuthenticationManagerMock = new Mock <IAzureAuthenticationManager>();
     ResourceManagerMock       = new Mock <IAzureResourceManager>();
     ServiceProvider           = ExtensionServiceProvider.CreateFromAssembliesInDirectory(ResourceProviderHostLoader.GetResourceProviderExtensionDlls());
     ServiceProvider.RegisterSingleService <IAzureAuthenticationManager>(AuthenticationManagerMock.Object);
     ServiceProvider.RegisterSingleService <IAzureResourceManager>(ResourceManagerMock.Object);
     HostLoader.InitializeHostedServices(ServiceProvider, HostMock.Object);
     ResourceProviderService = ServiceProvider.GetService <ResourceProviderService>();
 }
        public void GetShouldReturnImplementedAzureServiceIfFoundInCatalog()
        {
            //given
            ExtensionServiceProvider provider = ExtensionServiceProvider.Create(typeof(FakeAzureServerDiscoveryProvider).SingleItemAsEnumerable());

            //when
            IServerDiscoveryProvider serverDiscoveryProvider = ExtensionUtils.GetService <IServerDiscoveryProvider>(provider, new ServerDefinition("sqlserver", "azure"));

            Assert.NotNull(serverDiscoveryProvider);
            Assert.True(serverDiscoveryProvider is FakeAzureServerDiscoveryProvider);
        }
        private static void InitializeRequestHandlersAndServices(UtilityServiceHost serviceHost, SqlToolsContext sqlToolsContext)
        {
            // Load extension provider, which currently finds all exports in current DLL. Can be changed to find based
            // on directory or assembly list quite easily in the future
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateFromAssembliesInDirectory(GetResourceProviderExtensionDlls());

            serviceProvider.RegisterSingleService(sqlToolsContext);
            serviceProvider.RegisterSingleService(serviceHost);

            InitializeHostedServices(serviceProvider, serviceHost);

            serviceHost.InitializeRequestHandlers();
        }
Esempio n. 10
0
        public void ShouldFindDatabaseQuerierFromRealPath()
        {
            // Given the extension type loader is set to find SmoCollectionQuerier objects
            IMultiServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();
            // When I request a database compatible querier
            SmoQuerier querier = serviceProvider.GetService <SmoQuerier>(q => q.SupportedObjectTypes.Contains(typeof(Database)));

            // Then I expect to get back the SqlDatabaseQuerier
            Assert.NotNull(querier);
            Assert.Equal(typeof(SqlDatabaseQuerier), querier.GetType());

            // And I expect the service provider to have been set by the extension code
            Assert.NotNull(querier.ServiceProvider);
        }
        public void GetGetServiceOfExportableShouldReturnNullGivenSameTypeAsExportable()
        {
            //given
            ExtensionServiceProvider provider = ExtensionServiceProvider.Create(typeof(FakeAzureServerDiscoveryProvider).SingleItemAsEnumerable());

            //when
            IServerDiscoveryProvider serverDiscoveryProvider = ExtensionUtils.GetService <IServerDiscoveryProvider>(provider, new ServerDefinition("sqlserver", "azure"));

            Assert.NotNull(serverDiscoveryProvider);
            FakeAzureServerDiscoveryProvider fakeAzureServerDiscovery = serverDiscoveryProvider as FakeAzureServerDiscoveryProvider;

            Assert.NotNull(fakeAzureServerDiscovery);
            Assert.Null(fakeAzureServerDiscovery.ServerDiscoveryProvider);
        }
Esempio n. 12
0
        private SmoQuerier GetSmoQuerier(Type querierType)
        {
            // Given the extension type loader is set to find SmoCollectionQuerier objects
            IMultiServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();
            // When I request a compatible querier
            SmoQuerier querier = serviceProvider.GetService <SmoQuerier>(q => q.SupportedObjectTypes.Contains(querierType));

            // Then I expect to get back the Querier
            Assert.NotNull(querier);

            // And I expect the service provider to have been set by the extension code
            Assert.NotNull(querier.ServiceProvider);

            return(querier);
        }
Esempio n. 13
0
        private static void InitializeRequestHandlersAndServices(CredentialsServiceHost serviceHost, SqlToolsContext sqlToolsContext)
        {
            // Load extension provider, which currently finds all exports in current DLL. Can be changed to find based
            // on directory or assembly list quite easily in the future
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();

            serviceProvider.RegisterSingleService(sqlToolsContext);
            serviceProvider.RegisterSingleService(serviceHost);

            CredentialService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(CredentialService.Instance);

            InitializeHostedServices(serviceProvider, serviceHost);

            serviceHost.InitializeRequestHandlers();
        }
Esempio n. 14
0
        private static void VerifyQuerierLookup(Type smoType, Type querierType, bool expectExists)
        {
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.Create(new Type[] {
                typeof(SqlTableQuerier),
                typeof(SqlLinkedServerQuerier)
            });
            SmoQuerier querier = serviceProvider.GetService <SmoQuerier>(q => q.SupportedObjectTypes.Contains(smoType));

            if (expectExists)
            {
                Assert.NotNull(querier);
                Assert.Equal(querierType, querier.GetType());
                Assert.NotNull(querier.ServiceProvider);
            }
            else
            {
                Assert.Null(querier);
            }
        }
Esempio n. 15
0
        public NodeTests()
        {
            defaultServerInfo = TestObjects.GetTestServerInfo();

            defaultConnectionDetails = new ConnectionDetails()
            {
                DatabaseName = "master",
                ServerName   = "localhost",
                UserName     = "******",
                Password     = "******"
            };
            defaultConnParams = new ConnectionCompleteParams()
            {
                ServerInfo        = defaultServerInfo,
                ConnectionSummary = defaultConnectionDetails,
                OwnerUri          = defaultOwnerUri
            };

            // TODO can all tests use the standard service provider?
            ServiceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();
        }
Esempio n. 16
0
 /// <summary>
 /// Internal for testing only
 /// </summary>
 internal ObjectExplorerService(ExtensionServiceProvider serviceProvider)
     : this()
 {
     SetServiceProvider(serviceProvider);
 }
Esempio n. 17
0
        static void Main(string[] args)
        {
            try
            {
                // read command-line arguments
                string         applicationName = Path.ChangeExtension(ServiceName, ".exe");
                CommandOptions commandOptions  = new CommandOptions(args, applicationName);
                if (commandOptions.ShouldExit)
                {
                    return;
                }

                // we are in debug mode
                if (commandOptions.WaitForDebugger)
                {
                    int maxWait   = 30;
                    int waitCount = 0;
                    while (!Debugger.IsAttached && waitCount < maxWait)
                    {
                        Thread.Sleep(500);
                        waitCount++;
                    }
                }

                // configure log file
                string logFilePath = ServiceName;
                if (!string.IsNullOrWhiteSpace(commandOptions.LoggingDirectory))
                {
                    logFilePath = Path.Combine(commandOptions.LoggingDirectory, logFilePath);
                }

                Logger.Instance.Initialize(logFilePath: logFilePath, minimumLogLevel: MinimumLogLevel, isEnabled: commandOptions.EnableLogging);
                Logger.Instance.Write(LogLevel.Normal, "Starting language server host");

                // list all service assemblies that should be loaded by the host
                string[] searchPath = new string[] {
                    "Microsoft.SqlTools.Hosting.v2.dll",
                    //"Microsoft.SqlTools.CoreServices.dll",
                    "Microsoft.SqlTools.LanguageServerProtocol.dll",
                    "Microsoft.SqlTools.Samples.LanguageServerHost.Services.dll",
                };

                ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateFromAssembliesInDirectory(Path.GetDirectoryName(typeof(Program).Assembly.Location), searchPath);
                serviceProvider.RegisterSingleService(SettingsService <LanguageServerSettings> .Instance);

                ExtensibleServiceHost host = new ExtensibleServiceHost(serviceProvider, new StdioServerChannel());

                // TODO: can server capabilities be automatically determined by the registered services?
                host.ServerCapabilities = new ServerCapabilities
                {
                    TextDocumentSync = TextDocumentSyncKind.Incremental
                };

                Logger.Instance.Write(LogLevel.Verbose, "Starting wait loop");

                host.Start();
                host.WaitForExit();
            }
            catch (Exception e)
            {
                Logger.Instance.Write(LogLevel.Error, string.Format("An unhandled exception occurred: {0}", e));
                Environment.Exit(1);
            }
        }
Esempio n. 18
0
        private static void InitializeRequestHandlersAndServices(ServiceHost serviceHost, SqlToolsContext sqlToolsContext)
        {
            // Load extension provider, which currently finds all exports in current DLL. Can be changed to find based
            // on directory or assembly list quite easily in the future
            ExtensionServiceProvider serviceProvider = ExtensionServiceProvider.CreateDefaultServiceProvider();

            serviceProvider.RegisterSingleService(sqlToolsContext);
            serviceProvider.RegisterSingleService(serviceHost);

            // Initialize and register singleton services so they're accessible for any MEF service. In the future, these
            // could be updated to be IComposableServices, which would avoid the requirement to define a singleton instance
            // and instead have MEF handle discovery & loading
            WorkspaceService <SqlToolsSettings> .Instance.InitializeService(serviceHost);

            serviceProvider.RegisterSingleService(WorkspaceService <SqlToolsSettings> .Instance);

            LanguageService.Instance.InitializeService(serviceHost, sqlToolsContext);
            serviceProvider.RegisterSingleService(LanguageService.Instance);

            ConnectionService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ConnectionService.Instance);

            CredentialService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(CredentialService.Instance);

            QueryExecutionService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(QueryExecutionService.Instance);

            EditDataService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(EditDataService.Instance);

            MetadataService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(MetadataService.Instance);

            ScriptingService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ScriptingService.Instance);

            AdminService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(AdminService.Instance);

            AgentService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(AgentService.Instance);

            DisasterRecoveryService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(DisasterRecoveryService.Instance);

            FileBrowserService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(FileBrowserService.Instance);

            ProfilerService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ProfilerService.Instance);

            SecurityService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(SecurityService.Instance);

            DacFxService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(DacFxService.Instance);

            CmsService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(CmsService.Instance);

            SchemaCompare.SchemaCompareService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(SchemaCompareService.Instance);

            ServerConfigService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ServerConfigService.Instance);

            ExternalLanguageService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(ExternalLanguageService.Instance);

            SqlAssessmentService.Instance.InitializeService(serviceHost);
            serviceProvider.RegisterSingleService(SqlAssessmentService.Instance);

            InitializeHostedServices(serviceProvider, serviceHost);
            serviceHost.ServiceProvider = serviceProvider;

            serviceHost.InitializeRequestHandlers();
        }