...

Source file src/k8s.io/kubernetes/cluster/images/etcd/migrate/data_dir_test.go

Documentation: k8s.io/kubernetes/cluster/images/etcd/migrate

     1  /*
     2  Copyright 2018 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package main
    18  
    19  import (
    20  	"os"
    21  	"path/filepath"
    22  	"testing"
    23  
    24  	"github.com/blang/semver/v4"
    25  )
    26  
    27  var (
    28  	latestVersion = semver.MustParse("3.1.12")
    29  )
    30  
    31  func TestExistingDataDirWithVersionFile(t *testing.T) {
    32  	d, err := OpenOrCreateDataDirectory("testdata/datadir_with_version")
    33  	if err != nil {
    34  		t.Fatalf("Failed to open data dir: %v", err)
    35  	}
    36  	isEmpty, err := d.IsEmpty()
    37  	if err != nil {
    38  		t.Fatalf("Failed to check if data dir is empty: %v", err)
    39  	}
    40  	if isEmpty {
    41  		t.Errorf("Expected non-empty data directory to exist")
    42  	}
    43  	exists, err := d.versionFile.Exists()
    44  	if err != nil {
    45  		t.Fatal(err)
    46  	}
    47  	if !exists {
    48  		t.Fatalf("Expected version file %s to exist", d.versionFile.path)
    49  	}
    50  	vp, err := d.versionFile.Read()
    51  	if err != nil {
    52  		t.Fatalf("Failed to read version file %s: %v", d.versionFile.path, err)
    53  	}
    54  	expectedVersion := &EtcdVersionPair{&EtcdVersion{latestVersion}, storageEtcd3}
    55  	if !vp.Equals(expectedVersion) {
    56  		t.Errorf("Expected version file to contain %s, but got %s", expectedVersion, vp)
    57  	}
    58  }
    59  
    60  func TestExistingDataDirWithoutVersionFile(t *testing.T) {
    61  	targetVersion := &EtcdVersionPair{&EtcdVersion{latestVersion}, storageEtcd3}
    62  
    63  	d, err := OpenOrCreateDataDirectory("testdata/datadir_without_version")
    64  	if err != nil {
    65  		t.Fatalf("Failed to open data dir: %v", err)
    66  	}
    67  	exists, err := d.versionFile.Exists()
    68  	if err != nil {
    69  		t.Fatal(err)
    70  	}
    71  	if exists {
    72  		t.Errorf("Expected version file %s not to exist", d.versionFile.path)
    73  	}
    74  	err = d.Initialize(targetVersion)
    75  	if err != nil {
    76  		t.Fatalf("Failed initialize data directory %s: %v", d.path, err)
    77  	}
    78  	exists, err = d.versionFile.Exists()
    79  	if err != nil {
    80  		t.Fatal(err)
    81  	}
    82  	if exists {
    83  		t.Fatalf("Expected version file %s not to exist after initializing non-empty data-dir", d.versionFile.path)
    84  	}
    85  }
    86  
    87  func TestNonexistingDataDir(t *testing.T) {
    88  	targetVersion := &EtcdVersionPair{&EtcdVersion{latestVersion}, storageEtcd3}
    89  	path := newTestPath(t)
    90  	defer os.RemoveAll(path)
    91  	d, err := OpenOrCreateDataDirectory(filepath.Join(path, "data-dir"))
    92  	if err != nil {
    93  		t.Fatalf("Failed to open data dir: %v", err)
    94  	}
    95  	isEmpty, err := d.IsEmpty()
    96  	if err != nil {
    97  		t.Fatalf("Failed to check if data dir is empty: %v", err)
    98  	}
    99  	if !isEmpty {
   100  		t.Errorf("Expected empty data directory to exist")
   101  	}
   102  	err = d.Initialize(targetVersion)
   103  	if err != nil {
   104  		t.Fatalf("Failed initialize data directory %s: %v", d.path, err)
   105  	}
   106  	exists, err := d.versionFile.Exists()
   107  	if err != nil {
   108  		t.Fatal(err)
   109  	}
   110  	if !exists {
   111  		t.Fatalf("Expected version file %s to exist", d.versionFile.path)
   112  	}
   113  	isEmpty, err = d.IsEmpty()
   114  	if err != nil {
   115  		t.Fatalf("Failed to check if data dir is empty: %v", err)
   116  	}
   117  	if isEmpty {
   118  		t.Errorf("Expected non-empty data directory to exist after Initialize()")
   119  	}
   120  	vp, err := d.versionFile.Read()
   121  	if err != nil {
   122  		t.Fatalf("Failed to read version file %s: %v", d.versionFile.path, err)
   123  	}
   124  	if !vp.Equals(targetVersion) {
   125  		t.Errorf("Expected version file to contain %s, but got %s", targetVersion, vp)
   126  	}
   127  }
   128  
   129  func TestBackup(t *testing.T) {
   130  	path := newTestPath(t)
   131  	defer os.RemoveAll(path)
   132  	d, err := OpenOrCreateDataDirectory(filepath.Join(path, "data-dir"))
   133  	if err != nil {
   134  		t.Fatalf("Failed to open data dir: %v", err)
   135  	}
   136  	_, err = os.Create(filepath.Join(path, "data-dir", "empty.txt"))
   137  	if err != nil {
   138  		t.Fatal(err)
   139  	}
   140  	err = d.Backup()
   141  	if err != nil {
   142  		t.Fatalf("Failed to backup data directory %s: %v", d.path, err)
   143  	}
   144  	bak, err := OpenOrCreateDataDirectory(filepath.Join(path, "data-dir.bak"))
   145  	if err != nil {
   146  		t.Fatalf("Failed to open backup data dir: %v", err)
   147  	}
   148  	isEmpty, err := bak.IsEmpty()
   149  	if err != nil {
   150  		t.Fatal(err)
   151  	}
   152  	if isEmpty {
   153  		t.Errorf("Expected non-empty backup directory to exist after Backup()")
   154  	}
   155  }
   156  
   157  func newTestPath(t *testing.T) string {
   158  	path, err := os.MkdirTemp("", "etcd-migrate-test-")
   159  	if err != nil {
   160  		t.Fatalf("Failed to create tmp dir for test: %v", err)
   161  	}
   162  	err = os.Chmod(path, 0777)
   163  	if err != nil {
   164  		t.Fatalf("Failed to granting permission to tmp dir for test: %v", err)
   165  	}
   166  	return path
   167  }
   168  

View as plain text