Azure Devops - Database unit test login failed for user - visual-studio

I'm trying to get the Azure Devops unit test task configured and working but appear to be hitting an issues regarding failure to login. The unit tests work when run on the local machine connected to the Azure Sql database and the user name and password have been tested successfully against the azure sql database server directly in SSMS.
I've tried a variety of workarounds such as this but to no avail. What could possibly be the issue if access is ok.

Setup the app.config as follows in the screenshots and that appeared to address the issue. Specifically in the connection string, I opted to select the level of authentication required.

Related

The underlying provider failed on Open. Remote Debbuging with Azure to VS2019

I am remotely debugging my application with azure and VS2019 and it works fine until I have to connect to the database.
Then I get the following error. "The underlying provider failed on Open."
On the other hand, if I debug locally everything works correctly.
Do you have to activate any permission in Azure or in the project config so that the database can be accessed remotely?
Right after the connection string I have put the following.
_context.Database.Connection.Open ();
So it returns the following error to me:
"Unable to connect to any of the specified MySQL hosts".
All this locally does not happen to me. Only when trying to debug remotely.
According to your description, we can ensure that the remote debug function of vs2019 is normal. An error is reported in this _context.Database.Connection.Open (); code. Obviously, the program cannot connect to the mysql database server.
Troubleshooting:
First make sure that your mysql database server can be accessed using tools (such as Mysql Workbench).
Using tools to ensure that the database is accessible is to ensure that the firewall of your database server is open (mysql in azure or other server).
Check the connectionstring of mysql in the released program. According to your error message, it is likely that the connection string is used incorrectly.

TFS2015 Run Functional Tests - Windows Security prompt for credentials

I'm running functional tests(selenium) on remote test machines.
Sadly when i started using multiple test machines i get Windows Security prompt for credentials while Run Functional Tests step is performed on remote machine.
When i enter credentials set for Test Agent, functional tests starts but after restarting the test machine...
This prompt occurs each time when i start build with functional tests.
I tried to add/remove credentials in Credential Manager but each time new Credential for PersonalAccessToken is added.
I thought that setting same account name with same password on each machine may be the reason, but i changed it and this still occurs.
Anyone faced this problem before?
The account that you use in the Test Agent deployment step needs to have access to TFS.
This is not authenticated using PAS but AD credentials, the same ones that are used to run the service.

Connect to external services inside Visual Studio Online build/test task

We are running our build and test process on TFS Online. This works fine, until we try to connect to an external service. In our case a SQL Database.
The discussion about what we should mock and not is not really helpful in this case, as currently we need to do this.
We also tried just a simple ping, but not even that is getting out:
Test-Connection "172.217.18.100" #resolves to www.google.com
Testing connection to computer '172.217.18.100' failed: Error due to lack of resources
So we have the impression that most outside IP's/Ports/etc. could be locked?
Is there a way to open this up? If yes, how?
I can't imagine that we are the first ones to try something like that? Downloading something from a website, making a REST all, etc? Should be possible somehow, no?
Update 1:
We had a bit a more detailed question about this issue here, but figured it was a more generic problem.
The error message when we connect to Azure SQL is
System.Data.SqlClient.SqlException:
A network-related or instance-specific error occurred while establishing a connection to SQL Server.
The server was not found or was not accessible.
Verify that the instance name is correct and that SQL Server is configured to allow remote connections.
(provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)`
But the Named Pipes Provider part is missleading. You also get this message locally if you try to connect to an IP that does not exist.
We access Azure SQL from our C# NUnit tests.
Update 2:
We tried out the idea from #starain-MSFT and installed the Azure SQL Execute Query step/task. Installation works fine, but it seems to miss a component. See picture below.
No agent could be found with the following capabilities: azureps,
sqlps, npm, node.js, msbuild, visualstudio, vstest
Based on installed apps list I assume it's azureps.
Solution (partly):
Ok, so we went down the wrong route all the way. The problem is not the firewall (or any firewalls for that matter). The problem was that our app.config file didn't had the right settings in it.
We had the same setup for our App.config files inside the unit tests as for our Web.config files. Each had a App.Debug.config and a App.Release.config file attached. While this worked fine for the web applications, this obviously didn't work for our unit tests.
We are still looking for a good solution here.
I found this solution on how to add a transform task inside Visual Studio, but this is not exactly what we are searching, because we don't need the transform locally, but only in Visual Studio Teams.
app.config Transform inside Visual Studio Teams
So, I think we finally got it. With ConfigTransform, we can now transform our app.config files during the build process.
Using Hosted Agents, the SQL Server need to be accessible from internet in order to connect to your SQL Server from Hosted Agents.
The way to deal with this issue:
As Giulio said that set up an on premise build agent, then you just need to make sure the SQL Server instance can be accessible from that build agent (can be intranet).
Apply a SQL Server on internet, such as Azure SQL Server that can be accessible from internet.
Configure your SQL Server and network to let your SQL Server can be accessible from internet.
BTW, regarding your simple ping test, that IP address is used for its web site and the port is 80, you can access other resource with that IP. You can open another port on your server and access resource by IP with port.
Update 1:
Refer to this way to add Azure SQL Server Firewall Rule:
Check Allow Scripts to Access OAuth Token option (Options of build definition)
Add Azure PowerShell build step before test step (Arguments: -RestAddress https://[your vsts account].vsdtl.visualstudio.com/DefaultCollection/_apis/vslabs/ipaddress -Token $(System.AccessToken) -RG [resource group] -Server [server name(without .database.windows.net)]
Script:
param (
[string]$RestAddress,
[string]$Token,
[string]$RG,
[string]$Server
)
$basicAuth = ("{0}:{1}" -f 'test',$Token)
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth = [System.Convert]::ToBase64String($basicAuth)
$headers = #{Authorization=("Basic {0}" -f $basicAuth)}
$result = Invoke-RestMethod -Uri $RestAddress -headers $headers -Method Get
Write-Host $result.value
New-AzureRmSqlServerFirewallRule -ResourceGroupName $RG -ServerName $Server -FirewallRuleName "UnitTestRule" -StartIpAddress "$($result.value)" -EndIpAddress "$($result.value)"
BTW, you can refer to that script to remove the firewall rule after test.
Update 2:
The SQL ConnectionString like this:
Server=tcp:[server name].database.windows.net,1433;Initial Catalog=sqlstarain1;Persist Security Info=False;User ID=[user name];Password=[password];MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;
Windows Hosted build agents don't block 1433 outbound.
If you want to connect to SQL Azure through hosted build agents ensure that you enabled in your SQL Azure firewall settings "Allow access to Azure services". You don't need to run a script manually.
SQL Azure Firewall settings
Ensure you are using the right connection string during unit testing. E.g. in MSTest you need to add your connection string into App.config of you UnitTest project.
<connectionStrings>
<add name ="TestContext" providerName="System.Data.SqlClient"
connectionString="Server=tcp:[ServerName].database.windows.net,1433;Initial Catalog=[DB Name];Persist Security Info=False;User ID=[User];Password=[Password];MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;"/>
</connectionStrings>
That's it. I just did a quick test with EF, SQL Azure & VSTS Hosted Agent and it worked.
I assume that your are using the Hosted Agents, which means that the machine is a shared resource between many VSTS accounts (tenants) and managed (and locked) down by Microsoft.
You can easily install an agent on your own virtual machine and run the build there. The VM can be in the cloud or on premise, your choice. You trade simplicity and cheapness for full control.
Update:
Hosted Agents allows HTTP(S) calls which cover a lot of grounds. While useful I do not think it solves the original question to connect to a SQL database.

Deploying RDL's through Visual Studio to an SSRS instance on Azure

I am running into an issue with my deployment of SSRS RDL report files to my report server instance which is running on Azure.
The error I get when I deploy my reports is:
I have confirmed that I am able to access the report service URL from my web browser(it brings up the FTP-style directory listing of reports) but still receive this error.
This leads me to believe that I am unable to deploy to this server because of a permissions issue however I am unsure if I am able work around this as I tried going on the report server and creating permissions for my username but since the SSRS instance is not on my work server's domain(its hosted on azure) how would I go about creating permissions for my windows workstation user account(using my corporate domain) on the Azure SSRS instance?
This is quite frustrating as everytime I wish to deploy report changes I must manually copy the RDLs to the report server and upload them using the SSRS web interface one by one.
Any help with this issue would be greatly appreciated!
According to documentation you'll have to do the steps listed below. This is called the classic deployment model, but they recommend using the Resource Manager instead:
Quoted from here:
SQL Server Data Tools: Remote: On your local computer, create a Reporting Services project in SQL Server Data Tools that contains Reporting Services reports. Configure the project to connect to the web service URL.
Create a .VHD hard drive that contains reports and then upload and attach the drive.
Create a .VHD hard drive on your local computer that contains your reports.
Create and install a management certificate.
Upload the VHD file to Azure using the Add-AzureVHD cmdlet Create and upload a Windows Server VHD to Azure.
Attach the disk to the virtual machine.

Visual Studio webdeploy fail even when connection is validated?

I am trying to deploy my webapp VS2015 RC1 DNX 451. Even when I validate connection and run publish I get error
Severity Code Description Project File
Error Error Code: ERROR_USER_UNAUTHORIZED
Error More Information: Connected to the remote computer ("crocus.arvixe.com") using the Web Management Service, but could not authorize. Make sure that you are using the correct user name and password, that the site you are connecting to exists, and that the credentials represent a user who has permissions to access the site. Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_USER_UNAUTHORIZED.
Error Error: The remote server returned an error: (401) Unauthorized.
Googling the issue and even trying to view host forum just says make sure username and password is correct. I am getting nowhere trying various settings. Any ideas how to debug the issue?
I am using Arvixe.com as host.
You should contact Arvixe.com. They likely have some odd configuration on their servers but I would suspect they can help you resolve the issue.
Arvixe does not support Web Deploy anymore. Once they move you to their new servers Web Deploy won't be available to you. In Visual Studio you can set up a Publish with FTP instead of Web Deploy. If you're used to Web Deploy publishing your database changes, then you'll need to do those yourself with SQL scripts. Entity Frameworks has an option to produce a SQL script for a migration, so you can use that to publish your EF database changes.

Resources