Fix byte array encoding to yaml add a test to validate. (#485)

This commit is contained in:
Brendan Burns
2020-09-28 02:42:48 -07:00
committed by GitHub
parent d7f9eb9a2e
commit 0d6882316c
2 changed files with 59 additions and 1 deletions

View File

@@ -18,6 +18,42 @@ namespace k8s
/// </summary>
public static class Yaml
{
public class ByteArrayStringYamlConverter : IYamlTypeConverter
{
public bool Accepts(Type type)
{
return type == typeof(System.Byte[]);
}
public object ReadYaml(IParser parser, Type type)
{
if (parser.Current is YamlDotNet.Core.Events.Scalar scalar)
{
try
{
if (string.IsNullOrEmpty(scalar.Value))
{
return null;
}
return Encoding.UTF8.GetBytes(scalar.Value);
}
finally
{
parser.MoveNext();
}
}
throw new InvalidOperationException(parser.Current?.ToString());
}
public void WriteYaml(IEmitter emitter, object value, Type type)
{
var obj = (System.Byte[])value;
emitter.Emit(new YamlDotNet.Core.Events.Scalar(Encoding.UTF8.GetString(obj)));
}
}
/// <summary>
/// Load a collection of objects from a stream asynchronously
/// </summary>
@@ -65,6 +101,7 @@ namespace k8s
.WithNamingConvention(new CamelCaseNamingConvention())
.WithTypeInspector(ti => new AutoRestTypeInspector(ti))
.WithTypeConverter(new IntOrStringYamlConverter())
.WithTypeConverter(new ByteArrayStringYamlConverter())
.IgnoreUnmatchedProperties()
.Build();
var types = new List<Type>();
@@ -81,6 +118,7 @@ namespace k8s
.WithNamingConvention(new CamelCaseNamingConvention())
.WithTypeInspector(ti => new AutoRestTypeInspector(ti))
.WithTypeConverter(new IntOrStringYamlConverter())
.WithTypeConverter(new ByteArrayStringYamlConverter())
.Build();
parser = new Parser(new StringReader(content));
parser.Expect<StreamStart>();
@@ -118,6 +156,7 @@ namespace k8s
.WithNamingConvention(new CamelCaseNamingConvention())
.WithTypeInspector(ti => new AutoRestTypeInspector(ti))
.WithTypeConverter(new IntOrStringYamlConverter())
.WithTypeConverter(new ByteArrayStringYamlConverter())
.Build();
var obj = deserializer.Deserialize<T>(content);
return obj;
@@ -135,6 +174,7 @@ namespace k8s
.WithNamingConvention(new CamelCaseNamingConvention())
.WithTypeInspector(ti => new AutoRestTypeInspector(ti))
.WithTypeConverter(new IntOrStringYamlConverter())
.WithTypeConverter(new ByteArrayStringYamlConverter())
.WithEventEmitter(e => new StringQuotingEmitter(e))
.BuildValueSerializer();
emitter.Emit(new StreamStart());

View File

@@ -2,7 +2,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using k8s;
using System.Text;
using k8s.Models;
using Xunit;
@@ -321,5 +321,23 @@ spec:
var objStr = Yaml.SaveToString(obj);
Assert.Equal(content, objStr);
}
[Fact]
public void LoadSecret()
{
string kManifest = @"
apiVersion: v1
kind: Secret
metadata:
name: test-secret
data:
username: bXktYXBw
password: Mzk1MjgkdmRnN0pi
";
var result = Yaml.LoadFromString<V1Secret>(kManifest);
Assert.Equal(Encoding.UTF8.GetString(result.Data["username"]), "bXktYXBw");
Assert.Equal(Encoding.UTF8.GetString(result.Data["password"]), "Mzk1MjgkdmRnN0pi");
}
}
}