fix(yaml): byte[] serialization (#1657)

* fix(yaml): byte[] serialization

* fix: tests and code

* chore: add null check

* chore: add configmap tests
This commit is contained in:
Ivan Josipovic
2025-09-05 12:17:25 -07:00
committed by GitHub
parent d693a621dd
commit 885b9ae09d
2 changed files with 53 additions and 23 deletions

View File

@@ -78,7 +78,7 @@ namespace k8s
return null;
}
return Encoding.UTF8.GetBytes(scalar.Value);
return Convert.FromBase64String(scalar.Value);
}
finally
{
@@ -91,19 +91,15 @@ namespace k8s
public void WriteYaml(IEmitter emitter, object value, Type type, ObjectSerializer serializer)
{
if (value == null)
{
emitter.Emit(new Scalar(string.Empty));
return;
}
var obj = (byte[])value;
var strValue = Encoding.UTF8.GetString(obj);
// Check if the string is multi-line by looking for a newline character.
var scalarStyle = strValue.Contains('\n') ? ScalarStyle.Literal : ScalarStyle.Any;
emitter.Emit(new Scalar(
AnchorName.Empty,
TagName.Empty,
strValue,
scalarStyle,
true,
true));
var encoded = Convert.ToBase64String(obj);
emitter.Emit(new Scalar(encoded));
}
}

View File

@@ -804,12 +804,12 @@ spec:
{
var kManifest = @"
apiVersion: v1
data:
username: YlhrdFlYQnc=
password: TXprMU1qZ2tkbVJuTjBwaQ==
kind: Secret
metadata:
name: test-secret
data:
username: bXktYXBw
password: Mzk1MjgkdmRnN0pi
";
var result = KubernetesYaml.Deserialize<V1Secret>(kManifest, true);
@@ -823,13 +823,8 @@ data:
var kManifest = """
apiVersion: v1
data:
username: bXktYXBw
tls2.crt: |
-----BEGIN CERTIFICATE-----
FAKE CERT
FAKE CERT
FAKE CERT
-----END CERTIFICATE-----
username: YlhrdFlYQnc=
password: TXprMU1qZ2tkbVJuTjBwaQ==
kind: Secret
metadata:
name: test-secret
@@ -841,6 +836,45 @@ metadata:
Assert.Equal(kManifest, yaml);
}
[Fact]
public void LoadConfigMap()
{
var kManifest = @"
apiVersion: v1
binaryData:
username: YlhrdFlYQnc=
data:
password: Mzk1MjgkdmRnN0pi
kind: ConfigMap
metadata:
name: test-configmap
";
var result = KubernetesYaml.Deserialize<V1ConfigMap>(kManifest, true);
Assert.Equal("bXktYXBw", Encoding.UTF8.GetString(result.BinaryData["username"]));
Assert.Equal("Mzk1MjgkdmRnN0pi", result.Data["password"]);
}
[Fact]
public void WriteConfigMap()
{
var kManifest = """
apiVersion: v1
binaryData:
username: YlhrdFlYQnc=
data:
password: Mzk1MjgkdmRnN0pi
kind: ConfigMap
metadata:
name: test-configmap
""";
var result = KubernetesYaml.Deserialize<V1ConfigMap>(kManifest, true);
var yaml = KubernetesYaml.Serialize(result);
Assert.Equal(kManifest, yaml);
}
[Fact]
public void DeserializeWithJsonPropertyName()
{