github.com/hattya/nazuna@v0.7.1-0.20240331055452-55e14c275c1c/util_windows_test.go (about)

     1  //
     2  // nazuna :: util_windows_test.go
     3  //
     4  //   Copyright (c) 2014-2022 Akinori Hattori <hattya@gmail.com>
     5  //
     6  //   SPDX-License-Identifier: MIT
     7  //
     8  
     9  package nazuna_test
    10  
    11  import (
    12  	"os"
    13  	"testing"
    14  
    15  	"github.com/hattya/nazuna"
    16  )
    17  
    18  func TestCreateLink(t *testing.T) {
    19  	sandbox(t)
    20  
    21  	// hardlink
    22  	if err := nazuna.CreateLink("src\x00", "dst"); err == nil {
    23  		t.Error("expected error")
    24  	}
    25  	if err := nazuna.CreateLink("src", "dst\x00"); err == nil {
    26  		t.Error("expected error")
    27  	}
    28  	if err := nazuna.CreateLink("src", "dst"); err == nil {
    29  		t.Error("expected error")
    30  	}
    31  	if p := "src\x00"; nazuna.IsLink(p) {
    32  		t.Errorf("IsLink(%q) = true, expected false", p)
    33  	}
    34  	if p := "src"; nazuna.IsLink(p) {
    35  		t.Errorf("IsLink(%q) = true, expected false", p)
    36  	}
    37  	if p, o := "src", "dst"; nazuna.LinksTo(p, o) {
    38  		t.Errorf("LinksTo(%q, %q) = true, expected false", p, o)
    39  	}
    40  
    41  	if err := touch("src"); err != nil {
    42  		t.Fatal(err)
    43  	}
    44  	if p := "src\x00"; nazuna.IsLink(p) {
    45  		t.Errorf("IsLink(%q) = true, expected false", p)
    46  	}
    47  	if err := nazuna.CreateLink("src", "dst"); err != nil {
    48  		t.Error(err)
    49  	}
    50  	if p := "src"; !nazuna.IsLink(p) {
    51  		t.Errorf("IsLink(%q) = false, expected true", p)
    52  	}
    53  	if p := "dst"; !nazuna.IsLink(p) {
    54  		t.Errorf("IsLink(%q) = false, expected true", p)
    55  	}
    56  	if p, o := "dst", "src"; !nazuna.LinksTo(p, o) {
    57  		t.Errorf("LinksTo(%q, %q) = false, expected true", p, o)
    58  	}
    59  	if p, o := "dst", "_"; nazuna.LinksTo(p, o) {
    60  		t.Errorf("LinksTo(%q, %q) = true, expected false", p, o)
    61  	}
    62  	if err := nazuna.Unlink("dst"); err != nil {
    63  		t.Error(err)
    64  	}
    65  	if err := nazuna.Unlink("src"); err == nil {
    66  		t.Error("expected error")
    67  	}
    68  
    69  	// junction
    70  	if err := mkdir("srcdir"); err != nil {
    71  		t.Fatal(err)
    72  	}
    73  	if err := touch("dstdir"); err != nil {
    74  		t.Fatal(err)
    75  	}
    76  	if err := nazuna.CreateLink("srcdir", "dstdir"); err == nil {
    77  		t.Error("expected error")
    78  	}
    79  	if p, o := "dstdir", "srcdir"; nazuna.LinksTo(p, o) {
    80  		t.Errorf("LinksTo(%q, %q) = true, expected false", p, o)
    81  	}
    82  	if err := os.Remove("dstdir"); err != nil {
    83  		t.Fatal(err)
    84  	}
    85  
    86  	if err := nazuna.CreateLink("srcdir", "dstdir"); err != nil {
    87  		t.Error(err)
    88  	}
    89  	if p := "srcdir"; nazuna.IsLink(p) {
    90  		t.Errorf("IsLink(%q) = true, expected false", p)
    91  	}
    92  	if p := "dstdir"; !nazuna.IsLink(p) {
    93  		t.Errorf("IsLink(%q) = false, expected true", p)
    94  	}
    95  	if p, o := "dstdir", "srcdir"; !nazuna.LinksTo(p, o) {
    96  		t.Errorf("LinksTo(%q, %q) = false, expected true", p, o)
    97  	}
    98  	if err := nazuna.Unlink("dstdir"); err != nil {
    99  		t.Error(err)
   100  	}
   101  	if err := nazuna.Unlink("srcdir"); err == nil {
   102  		t.Error("expected error")
   103  	}
   104  }