github.com/mvdan/u-root-coreutils@v0.0.0-20230122170626-c2eef2898555/pkg/uefivars/vartest/test.go (about) 1 // Copyright 2020 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 // 5 // SPDX-License-Identifier: BSD-3-Clause 6 // 7 8 // Package vartest contains utility functions for testing uefivars and 9 // subpackages. It is unlikely to be useful outside of testing. 10 package vartest 11 12 import ( 13 "archive/zip" 14 "io" 15 "os" 16 17 "github.com/mvdan/u-root-coreutils/pkg/upath" 18 ) 19 20 // Extracts testdata zip for use as efivars in tests. Used in uefivars and subpackages. 21 func SetupVarZip(path string) (efiVarDir string, cleanup func(), err error) { 22 efiVarDir, err = os.MkdirTemp("", "gotest-uefivars") 23 if err != nil { 24 return 25 } 26 defer func() { 27 if err != nil { 28 os.RemoveAll(efiVarDir) 29 } 30 }() 31 z, err := zip.OpenReader(path) 32 if err != nil { 33 return 34 } 35 defer z.Close() 36 for _, zf := range z.File { 37 var fname string 38 if fname, err = upath.SafeFilepathJoin(efiVarDir, zf.Name); err != nil { 39 return 40 } 41 if zf.FileInfo().IsDir() { 42 err = os.MkdirAll(fname, zf.FileInfo().Mode()) 43 if err != nil { 44 return 45 } 46 } else { 47 var fo *os.File 48 fo, err = os.Create(fname) 49 if err != nil { 50 return 51 } 52 var fi io.ReadCloser 53 fi, err = zf.Open() 54 if err != nil { 55 return 56 } 57 _, err = io.Copy(fo, fi) 58 if err != nil { 59 return 60 } 61 fo.Close() 62 } 63 } 64 cleanup = func() { os.RemoveAll(efiVarDir) } 65 return 66 }