github.com/zntrio/harp/v2@v2.0.9/pkg/tasks/container/recover_test.go (about)

     1  // Licensed to Elasticsearch B.V. under one or more contributor
     2  // license agreements. See the NOTICE file distributed with
     3  // this work for additional information regarding copyright
     4  // ownership. Elasticsearch B.V. licenses this file to you under
     5  // the Apache License, Version 2.0 (the "License"); you may
     6  // not use this file except in compliance with the License.
     7  // You may obtain a copy of the License at
     8  //
     9  //     http://www.apache.org/licenses/LICENSE-2.0
    10  //
    11  // Unless required by applicable law or agreed to in writing,
    12  // software distributed under the License is distributed on an
    13  // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    14  // KIND, either express or implied.  See the License for the
    15  // specific language governing permissions and limitations
    16  // under the License.
    17  
    18  package container
    19  
    20  import (
    21  	"context"
    22  	"errors"
    23  	"io"
    24  	"testing"
    25  
    26  	"github.com/zntrio/harp/v2/pkg/sdk/cmdutil"
    27  	"github.com/zntrio/harp/v2/pkg/sdk/value"
    28  	"github.com/zntrio/harp/v2/pkg/sdk/value/encryption"
    29  
    30  	// Imported for tests.
    31  	_ "github.com/zntrio/harp/v2/pkg/sdk/value/encryption/jwe"
    32  	"github.com/zntrio/harp/v2/pkg/sdk/value/identity"
    33  	"github.com/zntrio/harp/v2/pkg/sdk/value/mock"
    34  	"github.com/zntrio/harp/v2/pkg/tasks"
    35  )
    36  
    37  func TestRecoverTask_Run(t *testing.T) {
    38  	type fields struct {
    39  		JSONReader   tasks.ReaderProvider
    40  		OutputWriter tasks.WriterProvider
    41  		Transformer  value.Transformer
    42  		JSONOutput   bool
    43  	}
    44  	type args struct {
    45  		ctx context.Context
    46  	}
    47  	tests := []struct {
    48  		name    string
    49  		fields  fields
    50  		args    args
    51  		wantErr bool
    52  	}{
    53  		{
    54  			name:    "nil",
    55  			wantErr: true,
    56  		},
    57  		{
    58  			name: "nil jsonReader",
    59  			fields: fields{
    60  				JSONReader: nil,
    61  			},
    62  			wantErr: true,
    63  		},
    64  		{
    65  			name: "nil outputWriter",
    66  			fields: fields{
    67  				JSONReader:   cmdutil.FileReader("../../../test/fixtures/identity/security.v1.json"),
    68  				OutputWriter: nil,
    69  			},
    70  			wantErr: true,
    71  		},
    72  		{
    73  			name: "nil transformer",
    74  			fields: fields{
    75  				JSONReader:   cmdutil.FileReader("../../../test/fixtures/identity/security.v1.json"),
    76  				OutputWriter: cmdutil.DiscardWriter(),
    77  				Transformer:  nil,
    78  			},
    79  			wantErr: true,
    80  		},
    81  		{
    82  			name: "jsonReader error",
    83  			fields: fields{
    84  				JSONReader:   cmdutil.FileReader("non-existent.json"),
    85  				OutputWriter: cmdutil.DiscardWriter(),
    86  				Transformer:  identity.Transformer(),
    87  			},
    88  			wantErr: true,
    89  		},
    90  		{
    91  			name: "jsonReader not an identity",
    92  			fields: fields{
    93  				JSONReader:   cmdutil.FileReader("../../../test/fixtures/bundles/complete.json"),
    94  				OutputWriter: cmdutil.DiscardWriter(),
    95  				Transformer:  identity.Transformer(),
    96  			},
    97  			wantErr: true,
    98  		},
    99  		{
   100  			name: "transformer error",
   101  			fields: fields{
   102  				JSONReader:   cmdutil.FileReader("../../../test/fixtures/identity/security.v1.json"),
   103  				OutputWriter: cmdutil.DiscardWriter(),
   104  				Transformer:  mock.Transformer(errors.New("test")),
   105  			},
   106  			wantErr: true,
   107  		},
   108  		{
   109  			name: "outputWriter error",
   110  			fields: fields{
   111  				JSONReader: cmdutil.FileReader("../../../test/fixtures/identity/security.v1.json"),
   112  				OutputWriter: func(ctx context.Context) (io.Writer, error) {
   113  					return nil, errors.New("test")
   114  				},
   115  				Transformer: encryption.Must(encryption.FromKey("jwe:pbes2-hs512-a256kw:test")),
   116  			},
   117  			wantErr: true,
   118  		},
   119  		{
   120  			name: "outputWriter closed",
   121  			fields: fields{
   122  				JSONReader:  cmdutil.FileReader("../../../test/fixtures/identity/security.v1.json"),
   123  				Transformer: encryption.Must(encryption.FromKey("jwe:pbes2-hs512-a256kw:test")),
   124  				OutputWriter: func(ctx context.Context) (io.Writer, error) {
   125  					return cmdutil.NewClosedWriter(), nil
   126  				},
   127  			},
   128  			wantErr: true,
   129  		},
   130  		{
   131  			name: "outputWriter closed - json",
   132  			fields: fields{
   133  				JSONReader:  cmdutil.FileReader("../../../test/fixtures/identity/security.v1.json"),
   134  				Transformer: encryption.Must(encryption.FromKey("jwe:pbes2-hs512-a256kw:test")),
   135  				OutputWriter: func(ctx context.Context) (io.Writer, error) {
   136  					return cmdutil.NewClosedWriter(), nil
   137  				},
   138  				JSONOutput: true,
   139  			},
   140  			wantErr: true,
   141  		},
   142  		// ---------------------------------------------------------------------
   143  		{
   144  			name: "valid - v1",
   145  			fields: fields{
   146  				JSONReader:   cmdutil.FileReader("../../../test/fixtures/identity/security.v1.json"),
   147  				OutputWriter: cmdutil.DiscardWriter(),
   148  				Transformer:  encryption.Must(encryption.FromKey("jwe:pbes2-hs512-a256kw:test")),
   149  			},
   150  			wantErr: false,
   151  		},
   152  		{
   153  			name: "valid - v1 - json output",
   154  			fields: fields{
   155  				JSONReader:   cmdutil.FileReader("../../../test/fixtures/identity/security.v2.json"),
   156  				OutputWriter: cmdutil.DiscardWriter(),
   157  				Transformer:  encryption.Must(encryption.FromKey("jwe:pbes2-hs512-a256kw:test")),
   158  				JSONOutput:   true,
   159  			},
   160  			wantErr: false,
   161  		},
   162  		{
   163  			name: "valid - v2",
   164  			fields: fields{
   165  				JSONReader:   cmdutil.FileReader("../../../test/fixtures/identity/security.v2.json"),
   166  				OutputWriter: cmdutil.DiscardWriter(),
   167  				Transformer:  encryption.Must(encryption.FromKey("jwe:pbes2-hs512-a256kw:test")),
   168  			},
   169  			wantErr: false,
   170  		},
   171  		{
   172  			name: "valid - v2 - json output",
   173  			fields: fields{
   174  				JSONReader:   cmdutil.FileReader("../../../test/fixtures/identity/security.v2.json"),
   175  				OutputWriter: cmdutil.DiscardWriter(),
   176  				Transformer:  encryption.Must(encryption.FromKey("jwe:pbes2-hs512-a256kw:test")),
   177  				JSONOutput:   true,
   178  			},
   179  			wantErr: false,
   180  		},
   181  	}
   182  	for _, tt := range tests {
   183  		t.Run(tt.name, func(t *testing.T) {
   184  			tr := &RecoverTask{
   185  				JSONReader:   tt.fields.JSONReader,
   186  				OutputWriter: tt.fields.OutputWriter,
   187  				Transformer:  tt.fields.Transformer,
   188  				JSONOutput:   tt.fields.JSONOutput,
   189  			}
   190  			if err := tr.Run(tt.args.ctx); (err != nil) != tt.wantErr {
   191  				t.Errorf("RecoverTask.Run() error = %v, wantErr %v", err, tt.wantErr)
   192  			}
   193  		})
   194  	}
   195  }