コード例 #1
0
        public async void GetDefinitionFromChildrenAndParents()
        {
            string queryString = "select * from master.sys.objects";
            // place the cursor on every token

            //cursor on objects
            TextDocumentPosition objectDocument = CreateTextDocPositionWithCursor(26, OwnerUri);

            //cursor on sys
            TextDocumentPosition sysDocument = CreateTextDocPositionWithCursor(22, OwnerUri);

            //cursor on master
            TextDocumentPosition masterDocument = CreateTextDocPositionWithCursor(17, OwnerUri);

            LiveConnectionHelper.TestConnectionResult connectionResult = LiveConnectionHelper.InitLiveConnectionInfo(null);
            ScriptFile     scriptFile = connectionResult.ScriptFile;
            ConnectionInfo connInfo   = connectionResult.ConnectionInfo;

            connInfo.RemoveAllConnections();
            var bindingQueue = new ConnectedBindingQueue();

            bindingQueue.AddConnectionContext(connInfo);
            scriptFile.Contents = queryString;

            var service = new LanguageService();

            service.RemoveScriptParseInfo(OwnerUri);
            service.BindingQueue = bindingQueue;
            await service.UpdateLanguageServiceOnConnection(connectionResult.ConnectionInfo);

            Thread.Sleep(2000);

            ScriptParseInfo scriptInfo = new ScriptParseInfo {
                IsConnected = true
            };

            service.ParseAndBind(scriptFile, connInfo);
            scriptInfo.ConnectionKey = bindingQueue.AddConnectionContext(connInfo);
            service.ScriptParseInfoMap.Add(OwnerUri, scriptInfo);

            // When I call the language service
            var objectResult = service.GetDefinition(objectDocument, scriptFile, connInfo);
            var sysResult    = service.GetDefinition(sysDocument, scriptFile, connInfo);
            var masterResult = service.GetDefinition(masterDocument, scriptFile, connInfo);

            // Then I expect the results to be non-null
            Assert.NotNull(objectResult);
            Assert.NotNull(sysResult);
            Assert.NotNull(masterResult);

            // And I expect the all results to be the same
            Assert.True(CompareLocations(objectResult.Locations, sysResult.Locations));
            Assert.True(CompareLocations(objectResult.Locations, masterResult.Locations));

            Cleanup(objectResult.Locations);
            Cleanup(sysResult.Locations);
            Cleanup(masterResult.Locations);
            service.ScriptParseInfoMap.Remove(OwnerUri);
            connInfo.RemoveAllConnections();
        }
コード例 #2
0
        private static async Task <AssessmentResult <TResult> > CallAssessment <TResult>(
            string methodName,
            SqlObjectType sqlObjectType,
            LiveConnectionHelper.TestConnectionResult liveConnection)
            where TResult : AssessmentItemInfo
        {
            var connInfo = liveConnection.ConnectionInfo;

            AssessmentResult <TResult> response;

            using (var service = new SqlAssessmentService(
                       TestServiceProvider.Instance.ConnectionService,
                       TestServiceProvider.Instance.WorkspaceService))
            {
                AddTestRules(service);

                string           randomUri     = Guid.NewGuid().ToString();
                AssessmentParams requestParams =
                    new AssessmentParams {
                    OwnerUri = randomUri, TargetType = sqlObjectType
                };
                ConnectParams connectParams = new ConnectParams
                {
                    OwnerUri   = requestParams.OwnerUri,
                    Connection = connInfo.ConnectionDetails,
                    Type       = ConnectionType.Default
                };

                var methodInfo = typeof(SqlAssessmentService).GetMethod(
                    methodName,
                    BindingFlags.Instance | BindingFlags.NonPublic);

                Assert.NotNull(methodInfo);

                var func = (AssessmentMethod <TResult>)Delegate.CreateDelegate(
                    typeof(AssessmentMethod <TResult>),
                    service,
                    methodInfo);

                response = await service.CallAssessmentEngine <TResult>(
                    requestParams,
                    connectParams,
                    randomUri,
                    t => func(t));
            }

            Assert.NotNull(response);
            if (response.Success)
            {
                Assert.All(
                    response.Items,
                    i =>
                {
                    Assert.Equal(sqlObjectType, i.TargetType);
                    Assert.Contains(i.Level, AllowedSeverityLevels);
                });
            }

            return(response);
        }
コード例 #3
0
        private string InitialExtract(DacFxService service, SqlTestDb sourceDb, LiveConnectionHelper.TestConnectionResult result)
        {
            string folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "DacFxTest");

            Directory.CreateDirectory(folderPath);

            var extractParams = new ExtractParams
            {
                DatabaseName       = sourceDb.DatabaseName,
                PackageFilePath    = Path.Combine(folderPath, string.Format("{0}.dacpac", sourceDb.DatabaseName)),
                ApplicationName    = "test",
                ApplicationVersion = "1.0.0.0"
            };

            ExtractOperation extractOperation = new ExtractOperation(extractParams, result.ConnectionInfo);

            service.PerformOperation(extractOperation, TaskExecutionMode.Execute);

            return(extractParams.PackageFilePath);
        }
コード例 #4
0
        public void GetDefinitionTimeoutTest()
        {
            // Given a binding queue that will automatically time out
            var languageService = new LanguageService();
            Mock <ConnectedBindingQueue> queueMock = new Mock <ConnectedBindingQueue>();

            languageService.BindingQueue = queueMock.Object;
            ManualResetEvent mre      = new ManualResetEvent(true); // Do not block
            Mock <QueueItem> itemMock = new Mock <QueueItem>();

            itemMock.Setup(i => i.ItemProcessed).Returns(mre);

            DefinitionResult timeoutResult = null;

            queueMock.Setup(q => q.QueueBindingOperation(
                                It.IsAny <string>(),
                                It.IsAny <Func <IBindingContext, CancellationToken, object> >(),
                                It.IsAny <Func <IBindingContext, object> >(),
                                It.IsAny <int?>(),
                                It.IsAny <int?>()))
            .Callback <string, Func <IBindingContext, CancellationToken, object>, Func <IBindingContext, object>, int?, int?>(
                (key, bindOperation, timeoutOperation, t1, t2) =>
            {
                timeoutResult          = (DefinitionResult)timeoutOperation((IBindingContext)null);
                itemMock.Object.Result = timeoutResult;
            })
            .Returns(() => itemMock.Object);

            TextDocumentPosition textDocument = new TextDocumentPosition
            {
                TextDocument = new TextDocumentIdentifier {
                    Uri = OwnerUri
                },
                Position = new Position
                {
                    Line      = 0,
                    Character = 20
                }
            };

            LiveConnectionHelper.TestConnectionResult connectionResult = LiveConnectionHelper.InitLiveConnectionInfo();
            ScriptFile     scriptFile = connectionResult.ScriptFile;
            ConnectionInfo connInfo   = connectionResult.ConnectionInfo;

            scriptFile.Contents = "select * from dbo.func ()";

            ScriptParseInfo scriptInfo = new ScriptParseInfo {
                IsConnected = true
            };

            languageService.ScriptParseInfoMap.Add(OwnerUri, scriptInfo);

            // When I call the language service
            var result = languageService.GetDefinition(textDocument, scriptFile, connInfo);

            // Then I expect null locations and an error to be reported
            Assert.NotNull(result);
            Assert.True(result.IsErrorResult);
            // Check timeout message
            Assert.Equal(SR.PeekDefinitionTimedoutError, result.Message);
        }