Skip to content

Commit

Permalink
Fix DollarId parallel test cases problems
Browse files Browse the repository at this point in the history
  • Loading branch information
xuzhg committed Feb 21, 2020
1 parent d0bf356 commit 7282f41
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 103 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,6 @@ public async Task DeleteNavigationLink()
var clientContext = new Client.Default.Container(new Uri(serviceRoot));
clientContext.MergeOption = MergeOption.OverwriteChanges;

await clientContext.ExecuteAsync(new Uri(serviceRoot + "Singers/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource"), "POST");
await clientContext.ExecuteAsync(new Uri(serviceRoot + "Albums/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource"), "POST");

var singer = await Task.Factory.FromAsync(clientContext.Singers.BeginExecute(null, null), (asyncResult) =>
{
return clientContext.Singers.EndExecute(asyncResult).Where(s => s.ID == 0).Single();
Expand Down Expand Up @@ -68,10 +65,7 @@ public async Task DeleteContainedNavigationLink()
var clientContext = new Client.Default.Container(new Uri(serviceRoot));
clientContext.MergeOption = MergeOption.OverwriteChanges;

await clientContext.ExecuteAsync(new Uri(serviceRoot + "Singers/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource"), "POST");
await clientContext.ExecuteAsync(new Uri(serviceRoot + "Albums/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource"), "POST");

const int albumKey = 5;
const int albumKey = 0;
var album = await Task.Factory.FromAsync(clientContext.Albums.BeginExecute(null, null), (asyncResult) =>
{
return clientContext.Albums.EndExecute(asyncResult).Where(a => a.ID == albumKey).Single();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,30 +7,26 @@
using Microsoft.AspNet.OData;
using Microsoft.AspNet.OData.Routing;
using Microsoft.Test.E2E.AspNet.OData.Common.Controllers;
using Xunit;

namespace Microsoft.Test.E2E.AspNet.OData.DollarId
{
public class SingersController : TestODataController
{
public static List<Singer> Singers;

static SingersController()
{
InitData();
}

private static void InitData()
{
Singers = Enumerable.Range(0, 5).Select(i =>
new Singer()
{
ID = i,
Name = string.Format("Name {0}", i)
}).ToList();
var singer = Singers.Single(s => s.ID == 0);
singer.Albums = new List<Album>();
singer.Albums.AddRange(AlbumsController.Albums.Take(3));
}
// #0 For DollarIdClientTest
// #1 For DollarIdTest
public static List<Singer> Singers = Enumerable.Range(0, 2).Select(i =>
new Singer()
{
ID = i,
Name = string.Format("Name {0}", i),
Albums = new List<Album>
{
new Album { ID = 0 },
new Album { ID = 1 },
new Album { ID = 2 }
}
}).ToList();

#region Actions

Expand Down Expand Up @@ -65,50 +61,34 @@ public ITestActionResult DeleteRef(int key, int relatedKey, string navigationPro
return StatusCode(HttpStatusCode.NoContent);
}

[HttpPost]
[ODataRoute("Singers/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource")]
public ITestActionResult ResetDataSourceOnCollectionOfSinger()
{
InitData();
return StatusCode(HttpStatusCode.NoContent);
}

#endregion
}

public class AlbumsController : TestODataController
{
public static List<Album> Albums;

static AlbumsController()
{
InitData();
}

private static void InitData()
{
Albums = Enumerable.Range(0, 10).Select(i =>
new Album()
{
ID = i,
Name = string.Format("Name {0}", i),
Sales = new List<AreaSales>()
{
new AreaSales()
{
ID = 1 + i,
City = string.Format("City{0}", i),
Sales = 1000 * i
},
new AreaSales()
{
ID = 2 + i,
City = string.Format("City{0}", i),
Sales = 2 * 1000 * i
}
}
}).ToList();
}
// #0 For DollarIdClientTest
// #1 For DollarIdTest
public static List<Album> Albums = Enumerable.Range(0, 2).Select(i =>
new Album()
{
ID = i,
Name = string.Format("Name {0}", i),
Sales = new List<AreaSales>()
{
new AreaSales()
{
ID = 1 + i,
City = string.Format("City{0}", i),
Sales = 1000 * i
},
new AreaSales()
{
ID = 2 + i,
City = string.Format("City{0}", i),
Sales = 2 * 1000 * i
}
}
}).ToList();

[EnableQuery]
public ITestActionResult Get()
Expand All @@ -126,10 +106,8 @@ public ITestActionResult Get(int key)
[EnableQuery]
public ITestActionResult GetSingers(int key)
{
if (Albums.SingleOrDefault(s => s.ID == key) == null)
{
return BadRequest();
}
Assert.Equal(3, key); // 3 is a magic test value from test case.

IList<Singer> singers = new List<Singer>();
singers.Add(new Singer()
{
Expand Down Expand Up @@ -168,13 +146,5 @@ public ITestActionResult DeleteSalesInfoFromAlum(int key, int relatedKey)
return StatusCode(HttpStatusCode.InternalServerError);
}
}

[HttpPost]
[ODataRoute("Albums/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource")]
public ITestActionResult ResetDataSourceOnCollectionOfAlbum()
{
InitData();
return StatusCode(HttpStatusCode.NoContent);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
// Licensed under the MIT License. See License.txt in the project root for license information.

using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNet.OData.Extensions;
using Microsoft.Test.E2E.AspNet.OData.Common.Execution;
Expand Down Expand Up @@ -33,26 +32,25 @@ protected static void UpdateConfigure(WebRouteConfiguration configuration)
[Fact]
public async Task DeleteNavigationLink()
{
var requestBaseUri = this.BaseAddress + "/Singers(0)/Albums";
// For parallel running and no side effect, pay attention that key value is 1.
// And for this test cases only, we don't need to reset the data source because it's only run once.
var requestBaseUri = this.BaseAddress + "/Singers(1)/Albums";

await ResetDataSource("Singers");
await ResetDataSource("Albums");

//DELETE Singers(0)/Albums/$ref?$id=BaseAddress/Albums(0)
//DELETE Singers(1)/Albums/$ref?$id=BaseAddress/Albums(1)
var response = await this.Client.DeleteAsync(string.Format(requestBaseUri + "/$ref?$id={0}/Albums(0)", this.BaseAddress));
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);

//GET Singers(0)/Albums
//GET Singers(1)/Albums
response = await this.Client.GetAsync(requestBaseUri);
var json = await response.Content.ReadAsObject<JObject>();
var result = json["value"] as JArray;
Assert.Equal<int>(2, result.Count);

//DELETE Singers(0)/Albums/$ref?$id=../../Albums(0)
//DELETE Singers(1)/Albums/$ref?$id=../../Albums(1)
response = await this.Client.DeleteAsync(string.Format(requestBaseUri + "/$ref?$id=../../Albums(1)"));
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);

//GET Singers(0)/Albums
//GET Singers(1)/Albums
response = await this.Client.GetAsync(requestBaseUri);
json = await response.Content.ReadAsObject<JObject>();
result = json["value"] as JArray;
Expand All @@ -62,23 +60,23 @@ public async Task DeleteNavigationLink()
[Fact]
public async Task DeleteContainedNavigationLink()
{
var requestBaseUri = this.BaseAddress + "/Albums(5)/Sales";

await ResetDataSource("Singers");
await ResetDataSource("Albums");
// For parallel running and no side effect, pay attention that key value is 1.
// And for this test cases only, we don't need to reset the data source because it's only run once.
var requestBaseUri = this.BaseAddress + "/Albums(1)/Sales";

var response = await this.Client.DeleteAsync(string.Format(requestBaseUri + "/$ref?$id={0}/Albums(5)/Sales(6)", this.BaseAddress));
var response = await this.Client.DeleteAsync(string.Format(requestBaseUri + "/$ref?$id={0}/Albums(1)/Sales(2)", this.BaseAddress));
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);

//GET Singers(0)/Albums
//GET Albums(1)/Sales
response = await this.Client.GetAsync(requestBaseUri);
var json = await response.Content.ReadAsObject<JObject>();
var result = json["value"] as JArray;
Assert.Single(result);

response = await this.Client.DeleteAsync(string.Format(requestBaseUri + "/$ref?$id=../../Albums(5)/Sales(7)", this.BaseAddress));
response = await this.Client.DeleteAsync(string.Format(requestBaseUri + "/$ref?$id=../../Albums(1)/Sales(3)", this.BaseAddress));
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);

// GET Albums(1)/Sales
response = await this.Client.GetAsync(requestBaseUri);
json = await response.Content.ReadAsObject<JObject>();
result = json["value"] as JArray;
Expand All @@ -88,23 +86,15 @@ public async Task DeleteContainedNavigationLink()
[Fact]
public async Task GetSingersNameOfAlbum()
{
var requestBaseUri = this.BaseAddress + "/Albums(5)/Microsoft.Test.E2E.AspNet.OData.DollarId.GetSingers()?$filter=MasterPiece eq 'def'&$select=Name";
// 3 is a magic test value and is verified at controller.
var requestBaseUri = this.BaseAddress + "/Albums(3)/Microsoft.Test.E2E.AspNet.OData.DollarId.GetSingers()?$filter=MasterPiece eq 'def'&$select=Name";

var response = await this.Client.GetAsync(requestBaseUri);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);

response = await this.Client.GetAsync(requestBaseUri);
var json = await response.Content.ReadAsObject<JObject>();
var result = json["value"];
Assert.Equal("Name102", (string)result[0]["Name"]);
}

private async Task<HttpResponseMessage> ResetDataSource(string controller)
{
var uriReset = string.Format(this.BaseAddress + "/{0}/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource", controller);
var response = await this.Client.PostAsync(uriReset, null);

return response;
}
}
}

0 comments on commit 7282f41

Please sign in to comment.