1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165
|
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package resource_test
import (
"bytes"
"io"
"testing"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/otel/sdk/resource"
)
func TestParsePlistFile(t *testing.T) {
standardPlist := bytes.NewBufferString(`<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ProductBuildVersion</key>
<string>20E232</string>
<key>ProductCopyright</key>
<string>1983-2021 Apple Inc.</string>
<key>ProductName</key>
<string>macOS</string>
<key>ProductUserVisibleVersion</key>
<string>11.3</string>
<key>ProductVersion</key>
<string>11.3</string>
<key>iOSSupportVersion</key>
<string>14.5</string>
</dict>
</plist>`)
parsedPlist := map[string]string{
"ProductBuildVersion": "20E232",
"ProductCopyright": "1983-2021 Apple Inc.",
"ProductName": "macOS",
"ProductUserVisibleVersion": "11.3",
"ProductVersion": "11.3",
"iOSSupportVersion": "14.5",
}
emptyPlist := bytes.NewBufferString(`<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
</dict>
</plist>`)
missingDictPlist := bytes.NewBufferString(`<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
</plist>`)
unknownElementsPlist := bytes.NewBufferString(`<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<a>
<b>123</b>
</a>
<key>ProductBuildVersion</key>
<c>Value</c>
<string>20E232</string>
<d attr="1"></d>
</dict>
</plist>`)
parsedUnknownElementsPlist := map[string]string{
"ProductBuildVersion": "20E232",
}
tt := []struct {
Name string
Plist io.Reader
Parsed map[string]string
}{
{"Standard", standardPlist, parsedPlist},
{"Empty", emptyPlist, map[string]string{}},
{"Missing dict", missingDictPlist, map[string]string{}},
{"Unknown elements", unknownElementsPlist, parsedUnknownElementsPlist},
}
for _, tc := range tt {
tc := tc
t.Run(tc.Name, func(t *testing.T) {
result, err := resource.ParsePlistFile(tc.Plist)
require.Equal(t, tc.Parsed, result)
require.NoError(t, err)
})
}
}
func TestParsePlistFileUnevenKeys(t *testing.T) {
plist := bytes.NewBufferString(`<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>ProductBuildVersion</key>
<string>20E232</string>
<key>ProductCopyright</key>
</dict>
</plist>`)
result, err := resource.ParsePlistFile(plist)
require.Nil(t, result)
require.Error(t, err)
}
func TestParsePlistFileMalformed(t *testing.T) {
plist := bytes.NewBufferString(`<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Product
</dict>
</plist>`)
result, err := resource.ParsePlistFile(plist)
require.Nil(t, result)
require.Error(t, err)
}
func TestBuildOSRelease(t *testing.T) {
tt := []struct {
Name string
Properties map[string]string
OSRelease string
}{
{"Empty properties", map[string]string{}, ""},
{"Empty properties (nil)", nil, ""},
{"Missing product name", map[string]string{
"ProductVersion": "11.3",
"ProductBuildVersion": "20E232",
}, ""},
{"Missing product version", map[string]string{
"ProductName": "macOS",
"ProductBuildVersion": "20E232",
}, ""},
{"Missing product build version", map[string]string{
"ProductName": "macOS",
"ProductVersion": "11.3",
}, ""},
{"All properties available", map[string]string{
"ProductName": "macOS",
"ProductVersion": "11.3",
"ProductBuildVersion": "20E232",
}, "macOS 11.3 (20E232)"},
}
for _, tc := range tt {
tc := tc
t.Run(tc.Name, func(t *testing.T) {
result := resource.BuildOSRelease(tc.Properties)
require.Equal(t, tc.OSRelease, result)
})
}
}
|