Skip to content

Commit 7282f41

Browse files
committed
Fix DollarId parallel test cases problems
1 parent d0bf356 commit 7282f41

File tree

3 files changed

+57
-103
lines changed

3 files changed

+57
-103
lines changed

test/E2ETest/Microsoft.Test.E2E.AspNet.OData/DollarId/DollarIdClientTest.cs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ public async Task DeleteNavigationLink()
3838
var clientContext = new Client.Default.Container(new Uri(serviceRoot));
3939
clientContext.MergeOption = MergeOption.OverwriteChanges;
4040

41-
await clientContext.ExecuteAsync(new Uri(serviceRoot + "Singers/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource"), "POST");
42-
await clientContext.ExecuteAsync(new Uri(serviceRoot + "Albums/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource"), "POST");
43-
4441
var singer = await Task.Factory.FromAsync(clientContext.Singers.BeginExecute(null, null), (asyncResult) =>
4542
{
4643
return clientContext.Singers.EndExecute(asyncResult).Where(s => s.ID == 0).Single();
@@ -68,10 +65,7 @@ public async Task DeleteContainedNavigationLink()
6865
var clientContext = new Client.Default.Container(new Uri(serviceRoot));
6966
clientContext.MergeOption = MergeOption.OverwriteChanges;
7067

71-
await clientContext.ExecuteAsync(new Uri(serviceRoot + "Singers/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource"), "POST");
72-
await clientContext.ExecuteAsync(new Uri(serviceRoot + "Albums/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource"), "POST");
73-
74-
const int albumKey = 5;
68+
const int albumKey = 0;
7569
var album = await Task.Factory.FromAsync(clientContext.Albums.BeginExecute(null, null), (asyncResult) =>
7670
{
7771
return clientContext.Albums.EndExecute(asyncResult).Where(a => a.ID == albumKey).Single();

test/E2ETest/Microsoft.Test.E2E.AspNet.OData/DollarId/DollarIdControllers.cs

Lines changed: 40 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,26 @@
77
using Microsoft.AspNet.OData;
88
using Microsoft.AspNet.OData.Routing;
99
using Microsoft.Test.E2E.AspNet.OData.Common.Controllers;
10+
using Xunit;
1011

1112
namespace Microsoft.Test.E2E.AspNet.OData.DollarId
1213
{
1314
public class SingersController : TestODataController
1415
{
15-
public static List<Singer> Singers;
16-
17-
static SingersController()
18-
{
19-
InitData();
20-
}
21-
22-
private static void InitData()
23-
{
24-
Singers = Enumerable.Range(0, 5).Select(i =>
25-
new Singer()
26-
{
27-
ID = i,
28-
Name = string.Format("Name {0}", i)
29-
}).ToList();
30-
var singer = Singers.Single(s => s.ID == 0);
31-
singer.Albums = new List<Album>();
32-
singer.Albums.AddRange(AlbumsController.Albums.Take(3));
33-
}
16+
// #0 For DollarIdClientTest
17+
// #1 For DollarIdTest
18+
public static List<Singer> Singers = Enumerable.Range(0, 2).Select(i =>
19+
new Singer()
20+
{
21+
ID = i,
22+
Name = string.Format("Name {0}", i),
23+
Albums = new List<Album>
24+
{
25+
new Album { ID = 0 },
26+
new Album { ID = 1 },
27+
new Album { ID = 2 }
28+
}
29+
}).ToList();
3430

3531
#region Actions
3632

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

68-
[HttpPost]
69-
[ODataRoute("Singers/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource")]
70-
public ITestActionResult ResetDataSourceOnCollectionOfSinger()
71-
{
72-
InitData();
73-
return StatusCode(HttpStatusCode.NoContent);
74-
}
75-
7664
#endregion
7765
}
7866

7967
public class AlbumsController : TestODataController
8068
{
81-
public static List<Album> Albums;
82-
83-
static AlbumsController()
84-
{
85-
InitData();
86-
}
87-
88-
private static void InitData()
89-
{
90-
Albums = Enumerable.Range(0, 10).Select(i =>
91-
new Album()
92-
{
93-
ID = i,
94-
Name = string.Format("Name {0}", i),
95-
Sales = new List<AreaSales>()
96-
{
97-
new AreaSales()
98-
{
99-
ID = 1 + i,
100-
City = string.Format("City{0}", i),
101-
Sales = 1000 * i
102-
},
103-
new AreaSales()
104-
{
105-
ID = 2 + i,
106-
City = string.Format("City{0}", i),
107-
Sales = 2 * 1000 * i
108-
}
109-
}
110-
}).ToList();
111-
}
69+
// #0 For DollarIdClientTest
70+
// #1 For DollarIdTest
71+
public static List<Album> Albums = Enumerable.Range(0, 2).Select(i =>
72+
new Album()
73+
{
74+
ID = i,
75+
Name = string.Format("Name {0}", i),
76+
Sales = new List<AreaSales>()
77+
{
78+
new AreaSales()
79+
{
80+
ID = 1 + i,
81+
City = string.Format("City{0}", i),
82+
Sales = 1000 * i
83+
},
84+
new AreaSales()
85+
{
86+
ID = 2 + i,
87+
City = string.Format("City{0}", i),
88+
Sales = 2 * 1000 * i
89+
}
90+
}
91+
}).ToList();
11292

11393
[EnableQuery]
11494
public ITestActionResult Get()
@@ -126,10 +106,8 @@ public ITestActionResult Get(int key)
126106
[EnableQuery]
127107
public ITestActionResult GetSingers(int key)
128108
{
129-
if (Albums.SingleOrDefault(s => s.ID == key) == null)
130-
{
131-
return BadRequest();
132-
}
109+
Assert.Equal(3, key); // 3 is a magic test value from test case.
110+
133111
IList<Singer> singers = new List<Singer>();
134112
singers.Add(new Singer()
135113
{
@@ -168,13 +146,5 @@ public ITestActionResult DeleteSalesInfoFromAlum(int key, int relatedKey)
168146
return StatusCode(HttpStatusCode.InternalServerError);
169147
}
170148
}
171-
172-
[HttpPost]
173-
[ODataRoute("Albums/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource")]
174-
public ITestActionResult ResetDataSourceOnCollectionOfAlbum()
175-
{
176-
InitData();
177-
return StatusCode(HttpStatusCode.NoContent);
178-
}
179149
}
180150
}

test/E2ETest/Microsoft.Test.E2E.AspNet.OData/DollarId/DollarIdTest.cs

Lines changed: 16 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
// Licensed under the MIT License. See License.txt in the project root for license information.
33

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

38-
await ResetDataSource("Singers");
39-
await ResetDataSource("Albums");
40-
41-
//DELETE Singers(0)/Albums/$ref?$id=BaseAddress/Albums(0)
39+
//DELETE Singers(1)/Albums/$ref?$id=BaseAddress/Albums(1)
4240
var response = await this.Client.DeleteAsync(string.Format(requestBaseUri + "/$ref?$id={0}/Albums(0)", this.BaseAddress));
4341
Assert.Equal(HttpStatusCode.NoContent, response.StatusCode);
4442

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

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

55-
//GET Singers(0)/Albums
53+
//GET Singers(1)/Albums
5654
response = await this.Client.GetAsync(requestBaseUri);
5755
json = await response.Content.ReadAsObject<JObject>();
5856
result = json["value"] as JArray;
@@ -62,23 +60,23 @@ public async Task DeleteNavigationLink()
6260
[Fact]
6361
public async Task DeleteContainedNavigationLink()
6462
{
65-
var requestBaseUri = this.BaseAddress + "/Albums(5)/Sales";
66-
67-
await ResetDataSource("Singers");
68-
await ResetDataSource("Albums");
63+
// For parallel running and no side effect, pay attention that key value is 1.
64+
// And for this test cases only, we don't need to reset the data source because it's only run once.
65+
var requestBaseUri = this.BaseAddress + "/Albums(1)/Sales";
6966

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

73-
//GET Singers(0)/Albums
70+
//GET Albums(1)/Sales
7471
response = await this.Client.GetAsync(requestBaseUri);
7572
var json = await response.Content.ReadAsObject<JObject>();
7673
var result = json["value"] as JArray;
7774
Assert.Single(result);
7875

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

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

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

96-
response = await this.Client.GetAsync(requestBaseUri);
9795
var json = await response.Content.ReadAsObject<JObject>();
9896
var result = json["value"];
9997
Assert.Equal("Name102", (string)result[0]["Name"]);
10098
}
101-
102-
private async Task<HttpResponseMessage> ResetDataSource(string controller)
103-
{
104-
var uriReset = string.Format(this.BaseAddress + "/{0}/Microsoft.Test.E2E.AspNet.OData.DollarId.ResetDataSource", controller);
105-
var response = await this.Client.PostAsync(uriReset, null);
106-
107-
return response;
108-
}
10999
}
110100
}

0 commit comments

Comments
 (0)