github.com/coreos/mantle@v0.13.0/sdk/repo/manifest_test.go (about)

     1  // Copyright 2016 CoreOS, Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package repo
    16  
    17  import (
    18  	"encoding/xml"
    19  	"testing"
    20  
    21  	"github.com/kylelemons/godebug/diff"
    22  )
    23  
    24  // Test manifest document, this is mostly identical to the output of
    25  // `repo manifest -r` except self-closing tags not used (Go doesn't
    26  // output them) and attribute order is a bit different, Go uses struct
    27  // order but Python alphabetizes.
    28  const testManifest = `<?xml version="1.0" encoding="UTF-8"?>
    29  <manifest>
    30    <notice>Your sources have been synced successfully.</notice>
    31    <remote name="cros" fetch="https://chromium.googlesource.com/" review="gerrit.chromium.org/gerrit"></remote>
    32    <remote name="github" fetch=".."></remote>
    33    <remote name="private" fetch="ssh://git@github.com"></remote>
    34    <default remote="github" revision="refs/heads/master" sync-j="4"></default>
    35    <project name="appc/acbuild" path="src/third_party/appc-acbuild" revision="dd71391585dd0e96e56877d650ff1030cd7d9b01" groups="minilayout" upstream="refs/heads/master"></project>
    36    <project name="appc/spec" path="src/third_party/appc-spec" revision="62d46939da30111dc3eae51dd36ad5cd146dd964" groups="minilayout" upstream="refs/heads/master"></project>
    37    <project name="chromiumos/platform/crostestutils" path="src/platform/crostestutils" remote="cros" revision="35331923b30e031a3b3573533bb3b411453d1273" groups="minilayout" upstream="refs/heads/master"></project>
    38    <project name="chromiumos/platform/factory-utils" path="src/platform/factory-utils" remote="cros" revision="f2e4d8c1e0753c385f34d7be8b3f4ceb3ab17abe" groups="minilayout" upstream="refs/heads/master"></project>
    39    <project name="chromiumos/repohooks" path="src/repohooks" remote="cros" revision="7a610e823d287f3a1f796100b2a3d11da83de89e" groups="minilayout" upstream="refs/heads/master"></project>
    40    <project name="chromiumos/third_party/pyelftools" path="chromite/third_party/pyelftools" remote="cros" revision="bdc1d380acd88d4bfaf47265008091483b0d614e" groups="minilayout" upstream="refs/heads/master"></project>
    41    <project name="coreos/baselayout" path="src/third_party/baselayout" revision="fa6fe343b60a6ca694137048278d06aeeba051b6" groups="minilayout" upstream="refs/heads/master"></project>
    42    <project name="coreos/bootengine" path="src/third_party/bootengine" revision="09766b249af4190eef69cccd6609cebab7f6a8b4" groups="minilayout" upstream="refs/heads/master"></project>
    43    <project name="coreos/chromite" path="chromite" revision="f3db21adb76ea48390c5bacc6ae4b70f1037f657" groups="minilayout" upstream="refs/heads/master">
    44      <copyfile src="AUTHORS" dest="AUTHORS"></copyfile>
    45      <copyfile src="LICENSE" dest="LICENSE"></copyfile>
    46    </project>
    47    <project name="coreos/coreos-buildbot" path="src/third_party/coreos-buildbot" revision="3e4b20f67839aa541839eca6b4b7274d5ad1932c" groups="minilayout" upstream="refs/heads/master"></project>
    48    <project name="coreos/coreos-cloudinit" path="src/third_party/coreos-cloudinit" revision="b3f805dee6a4aa5ed298a1f370284df470eecf43" groups="minilayout" upstream="refs/heads/master"></project>
    49    <project name="coreos/coreos-metadata" path="src/third_party/coreos-metadata" revision="d976d664051f5b95ab60f7f1770b1b2bcc2877b2" groups="minilayout" upstream="refs/heads/master"></project>
    50    <project name="coreos/coreos-overlay" path="src/third_party/coreos-overlay" revision="c6e011295c7e6c8878f95206c706d53d9294122d" groups="minilayout" upstream="refs/heads/master"></project>
    51    <project name="coreos/coretest" path="src/third_party/coretest" revision="991faaf28eb21f185fed0708b526849a8bc128e6" groups="minilayout" upstream="refs/heads/master"></project>
    52    <project name="coreos/dev-util" path="src/platform/dev" revision="072c33135839b692c6ceb37765e2e0f1a65b416c" groups="minilayout" upstream="refs/heads/master"></project>
    53    <project name="coreos/docker" path="src/third_party/docker" revision="9a9bbacae56d55b45c39751148d967e7d5dfcdfc" groups="minilayout" upstream="refs/heads/master"></project>
    54    <project name="coreos/efunctions" path="src/third_party/efunctions" revision="ecef964cb1eed5c8482ab4c75a23de35fd390584" groups="minilayout" upstream="refs/heads/master"></project>
    55    <project name="coreos/etcd" path="src/third_party/etcd" revision="bfcd39335c6c27d84164c1b1d9e9d65c2e8f39b6" groups="minilayout" upstream="refs/heads/master"></project>
    56    <project name="coreos/etcdctl" path="src/third_party/etcdctl" revision="4c3f5c9fb3441991abf950651be977c3e0eef30e" groups="minilayout" upstream="refs/heads/master"></project>
    57    <project name="coreos/fleet" path="src/third_party/fleet" revision="d605dc00bf2fd4e66f4f79d6ddc56170f53865da" groups="minilayout" upstream="refs/heads/master"></project>
    58    <project name="coreos/grub" path="src/third_party/grub" revision="4ccc609994fe2f5e0911b91a11ad9e4289dc3a04" groups="minilayout" upstream="refs/heads/master"></project>
    59    <project name="coreos/ignition" path="src/third_party/ignition" revision="d4250a015b0d9d9c48338a3644ff3c007dfc7e7d" groups="minilayout" upstream="refs/heads/master"></project>
    60    <project name="coreos/init" path="src/third_party/init" revision="69492d452bc51c4edaa888c69f1fc97fab68c065" groups="minilayout" upstream="refs/heads/master"></project>
    61    <project name="coreos/installer" path="src/platform/installer" revision="95815a7cc15abea574e1b06d9fd403b90b29ba01" groups="minilayout" upstream="refs/heads/master"></project>
    62    <project name="coreos/locksmith" path="src/third_party/locksmith" revision="816e4c4cb05525d43c8aad919eddcc32b4e91619" groups="minilayout" upstream="refs/heads/master"></project>
    63    <project name="coreos/mantle" path="src/third_party/mantle" revision="a6b9288b9078fc02f8ab2f376175abaa20deac5c" groups="minilayout" upstream="refs/heads/master"></project>
    64    <project name="coreos/mayday" path="src/third_party/mayday" revision="85f8b48da25fd6e3c36a9aa1f7d90c19078777ab" groups="minilayout" upstream="refs/heads/master"></project>
    65    <project name="coreos/nss-altfiles" path="src/third_party/nss-altfiles" revision="508d986e38c70bd0636740d287d2fe807822fb57" groups="minilayout" upstream="refs/heads/master"></project>
    66    <project name="coreos/portage-stable" path="src/third_party/portage-stable" revision="b9a47e57b74de596df9bf5da28b85aad105781e3" groups="minilayout" upstream="refs/heads/master"></project>
    67    <project name="coreos/rkt" path="src/third_party/rkt" revision="debc46e5c8b4f1e8519033f5c5ffefe07f7bc3fe" groups="minilayout" upstream="refs/heads/master"></project>
    68    <project name="coreos/scripts" path="src/scripts" revision="b77aa4d24876ed86de834e5dc3c715eaae1ddc92" groups="minilayout" upstream="refs/heads/master"></project>
    69    <project name="coreos/sdnotify-proxy" path="src/third_party/sdnotify-proxy" revision="bfd0269267d91f3bbe89db49ec8ea8903ae8aa3c" groups="minilayout" upstream="refs/heads/master"></project>
    70    <project name="coreos/seismograph" path="src/third_party/seismograph" revision="a96246842fe43d410cb8a69daef0d96c8fd56a21" groups="minilayout" upstream="refs/heads/master"></project>
    71    <project name="coreos/shim" path="src/third_party/shim" revision="03a1513b0985fd682b13a8d29fe3f1314a704c66" groups="minilayout" upstream="refs/heads/master"></project>
    72    <project name="coreos/sysroot-wrappers" path="src/third_party/sysroot-wrappers" revision="437a7a86a482348828423ffd016b379fb70b0445" groups="minilayout" upstream="refs/heads/master"></project>
    73    <project name="coreos/systemd" path="src/third_party/systemd" revision="e859aa9e993453be321450148d45d08fcc55c3f5" groups="minilayout" upstream="refs/heads/master"></project>
    74    <project name="coreos/toolbox" path="src/third_party/toolbox" revision="45f497d12139b6d823a070cfab7724ead0b8bedd" groups="minilayout" upstream="refs/heads/master"></project>
    75    <project name="coreos/update_engine" path="src/third_party/update_engine" revision="fb89e2500e5b1f31d227db5f82b30c1a87113a12" groups="minilayout" upstream="refs/heads/master"></project>
    76    <project name="coreos/updateservicectl" path="src/third_party/updateservicectl" revision="0842a025368e7ad9903bc70fcf5aaf06e1f39652" groups="minilayout" upstream="refs/heads/master"></project>
    77    <repo-hooks in-project="chromiumos/repohooks" enabled-list="pre-upload"></repo-hooks>
    78  </manifest>`
    79  
    80  func TestMarshal(t *testing.T) {
    81  	var manifest Manifest
    82  	if err := xml.Unmarshal([]byte(testManifest), &manifest); err != nil {
    83  		t.Fatal(err)
    84  	}
    85  
    86  	out, err := xml.MarshalIndent(&manifest, "", "  ")
    87  	if err != nil {
    88  		t.Fatal(err)
    89  	}
    90  
    91  	testResult := xml.Header + string(out)
    92  	if d := diff.Diff(testManifest, testResult); d != "" {
    93  		t.Fatalf("Unexpected XML:\n%s", d)
    94  	}
    95  }