Skip to content

[s390x] Fix Extensions.ApiDescription.Client tests on s390x #58235

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@ public void Execute_AddsExpectedMetadata()
orderedMetadata.Add(key, metadata[key]);
}

Assert.Equal(expectedMetadata, orderedMetadata);
expectedMetadata["SerializedMetadata"] = string.Join("|", expectedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's not clear to me why we need to make this mutation to the SerializedMetadata field on S390X targets. Can you provide an example of what the current metadata output looks like? The logs you shared appear to be truncated and don't show the actual comparison of the SerializedMetadata field.

Copy link
Author

@saitama951 saitama951 Oct 24, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to my understanding, This might be due to when serializing metadata


where CloneCustomMetadata usually returns an Dictionary where the order might be undefined.

Here is the difference in this particular test case on s390x

Expected: [ClassName, NSwagClient][CodeGenerator, NSwagCSharp][FirstForGenerator, true][Namespace, Console.Client][OriginalItemSpec, TestProjects/files/NSwag.json][OutputPath, obj/NSwagClient.cs][SerializedMetadata, Identity=TestProjects/files/NSwag.json|FirstForGenerator=true|CodeGenerator=NSwagCSharp|OutputPath=obj/NSwagClient.cs|Namespace=Console.Client|OriginalItemSpec=TestProjects/files/NSwag.json|ClassName=NSwagClient]
--------------------------------------------------------------------------------------------
Actual: [ClassName, NSwagClient][CodeGenerator, NSwagCSharp][FirstForGenerator, true][Namespace, Console.Client][OriginalItemSpec, TestProjects/files/NSwag.json][OutputPath, obj/NSwagClient.cs][SerializedMetadata, Identity=TestProjects/files/NSwag.json|FirstForGenerator=true|Namespace=Console.Client|OriginalItemSpec=TestProjects/files/NSwag.json|ClassName=NSwagClient|OutputPath=obj/NSwagClient.cs|CodeGenerator=NSwagCSharp]

Note this change in order is not only wrt architecture but with runtime's as well.
here is the change in order for x64 mono

expected: [ClassName, NSwagClient][CodeGenerator, NSwagCSharp][FirstForGenerator, true][Namespace, Console.Client][OriginalItemSpec, TestProjects/files/NSwag.json][OutputPath, obj/NSwagClient.cs][SerializedMetadata, Identity=TestProjects/files/NSwag.json|FirstForGenerator=true|CodeGenerator=NSwagCSharp|OutputPath=obj/NSwagClient.cs|Namespace=Console.Client|OriginalItemSpec=TestProjects/files/NSwag.json|ClassName=NSwagClient]
--------------------------------------------------------------------------------------------
Actual: [ClassName, NSwagClient][CodeGenerator, NSwagCSharp][FirstForGenerator, true][Namespace, Console.Client][OriginalItemSpec, TestProjects/files/NSwag.json][OutputPath, obj/NSwagClient.cs][SerializedMetadata, Identity=TestProjects/files/NSwag.json|CodeGenerator=NSwagCSharp|OriginalItemSpec=TestProjects/files/NSwag.json|FirstForGenerator=true|OutputPath=obj/NSwagClient.cs|ClassName=NSwagClient|Namespace=Console.Client]

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@captainsafia can we reopen this PR?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the change makes sense to me, maybe we could add a little helper method to do the reordering so we don't have all the repetitive code?

orderedMetadata["SerializedMetadata"] = string.Join("|", orderedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
Assert.Equal(expectedMetadata, orderedMetadata);
}

[Fact]
Expand Down Expand Up @@ -118,7 +120,9 @@ public void Execute_DoesNotOverrideClassName()
orderedMetadata.Add(key, metadata[key]);
}

Assert.Equal(expectedMetadata, orderedMetadata);
expectedMetadata["SerializedMetadata"] = string.Join("|", expectedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
orderedMetadata["SerializedMetadata"] = string.Join("|", orderedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
Assert.Equal(expectedMetadata, orderedMetadata);
}

[Fact]
Expand Down Expand Up @@ -176,7 +180,9 @@ public void Execute_DoesNotOverrideNamespace()
orderedMetadata.Add(key, metadata[key]);
}

Assert.Equal(expectedMetadata, orderedMetadata);
expectedMetadata["SerializedMetadata"] = string.Join("|", expectedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
orderedMetadata["SerializedMetadata"] = string.Join("|", orderedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
Assert.Equal(expectedMetadata, orderedMetadata);
}

[Fact]
Expand Down Expand Up @@ -233,8 +239,11 @@ public void Execute_DoesNotOverrideOutputPath_IfRooted()
{
orderedMetadata.Add(key, metadata[key]);
}
// sort the values, since order is undefined for Dictionary
expectedMetadata["SerializedMetadata"] = string.Join("|", expectedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
orderedMetadata["SerializedMetadata"] = string.Join("|", orderedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));

Assert.Equal(expectedMetadata, orderedMetadata);
Assert.Equal<SortedDictionary<string, string>>(expectedMetadata, orderedMetadata);
}

[Fact]
Expand Down Expand Up @@ -384,7 +393,9 @@ public void Execute_SetsClassName_BasedOnOutputPath()
orderedMetadata.Add(key, metadata[key]);
}

Assert.Equal(expectedMetadata, orderedMetadata);
expectedMetadata["SerializedMetadata"] = string.Join("|", expectedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
orderedMetadata["SerializedMetadata"] = string.Join("|", orderedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
Assert.Equal(expectedMetadata, orderedMetadata);
}

[Theory]
Expand Down Expand Up @@ -446,8 +457,9 @@ public void Execute_SetsClassName_BasedOnSanitizedOutputPath(string outputPath,
{
orderedMetadata.Add(key, metadata[key]);
}

Assert.Equal(expectedMetadata, orderedMetadata);
expectedMetadata["SerializedMetadata"] = string.Join("|", expectedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
orderedMetadata["SerializedMetadata"] = string.Join("|", orderedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
Assert.Equal(expectedMetadata, orderedMetadata);
}

[Fact]
Expand Down Expand Up @@ -545,7 +557,9 @@ public void Execute_SetsFirstForGenerator_UsesCorrectExtension()
orderedMetadata.Add(key, metadata[key]);
}

Assert.Equal(expectedMetadata1, orderedMetadata);
expectedMetadata1["SerializedMetadata"] = string.Join("|", expectedMetadata1["SerializedMetadata"].Split('|').OrderBy(s => s));
orderedMetadata["SerializedMetadata"] = string.Join("|", orderedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
Assert.Equal(expectedMetadata1, orderedMetadata);
},
output =>
{
Expand All @@ -557,7 +571,9 @@ public void Execute_SetsFirstForGenerator_UsesCorrectExtension()
orderedMetadata.Add(key, metadata[key]);
}

Assert.Equal(expectedMetadata2, orderedMetadata);
expectedMetadata2["SerializedMetadata"] = string.Join("|", expectedMetadata2["SerializedMetadata"].Split('|').OrderBy(s => s));
orderedMetadata["SerializedMetadata"] = string.Join("|", orderedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
Assert.Equal(expectedMetadata2, orderedMetadata);
},
output =>
{
Expand All @@ -569,7 +585,9 @@ public void Execute_SetsFirstForGenerator_UsesCorrectExtension()
orderedMetadata.Add(key, metadata[key]);
}

Assert.Equal(expectedMetadata3, orderedMetadata);
expectedMetadata3["SerializedMetadata"] = string.Join("|", expectedMetadata3["SerializedMetadata"].Split('|').OrderBy(s => s));
orderedMetadata["SerializedMetadata"] = string.Join("|", orderedMetadata["SerializedMetadata"].Split('|').OrderBy(s => s));
Assert.Equal(expectedMetadata3, orderedMetadata);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,10 @@ public void SerializeMetadata_ReturnsExpectedString()
// Act
var result = MetadataSerializer.SerializeMetadata(input);

// Assert
// sort the values, since order is undefined for Dictionary
expectedResult = string.Join("|", expectedResult.Split('|').OrderBy(s => s));
result = string.Join("|", result.Split('|').OrderBy(s => s));
// Assert
Assert.Equal(expectedResult, result);
}

Expand Down
Loading