github.com/braveheart12/insolar-09-08-19@v0.8.7/ledger/storage/nodes/nodes_test.go (about)

     1  /*
     2   *    Copyright 2019 Insolar
     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 nodes
    18  
    19  import (
    20  	"testing"
    21  
    22  	"github.com/google/gofuzz"
    23  	"github.com/insolar/insolar"
    24  	"github.com/insolar/insolar/core"
    25  	"github.com/insolar/insolar/gen"
    26  	"github.com/insolar/insolar/ledger/storage"
    27  	"github.com/stretchr/testify/assert"
    28  )
    29  
    30  func TestNodeStorage_All(t *testing.T) {
    31  	t.Parallel()
    32  
    33  	var all []insolar.Node
    34  	f := fuzz.New().Funcs(func(e *insolar.Node, c fuzz.Continue) {
    35  		e.ID = gen.Reference()
    36  	})
    37  	f.NumElements(5, 10).NilChance(0).Fuzz(&all)
    38  	pulse := gen.PulseNumber()
    39  
    40  	t.Run("returns correct nodes", func(t *testing.T) {
    41  		nodeStorage := NewStorage()
    42  		nodeStorage.nodes[pulse] = all
    43  		result, err := nodeStorage.All(pulse)
    44  		assert.NoError(t, err)
    45  		assert.Equal(t, all, result)
    46  	})
    47  
    48  	t.Run("returns nil when empty nodes", func(t *testing.T) {
    49  		nodeStorage := NewStorage()
    50  		nodeStorage.nodes[pulse] = nil
    51  		result, err := nodeStorage.All(pulse)
    52  		assert.NoError(t, err)
    53  		assert.Nil(t, result)
    54  	})
    55  
    56  	t.Run("returns error when no nodes", func(t *testing.T) {
    57  		nodeStorage := NewStorage()
    58  		result, err := nodeStorage.All(pulse)
    59  		assert.Equal(t, core.ErrNoNodes, err)
    60  		assert.Nil(t, result)
    61  	})
    62  }
    63  
    64  func TestNodeStorage_InRole(t *testing.T) {
    65  	t.Parallel()
    66  
    67  	var (
    68  		virtuals  []insolar.Node
    69  		materials []insolar.Node
    70  		all       []insolar.Node
    71  	)
    72  	{
    73  		f := fuzz.New().Funcs(func(e *insolar.Node, c fuzz.Continue) {
    74  			e.ID = gen.Reference()
    75  			e.Role = core.StaticRoleVirtual
    76  		})
    77  		f.NumElements(5, 10).NilChance(0).Fuzz(&virtuals)
    78  	}
    79  	{
    80  		f := fuzz.New().Funcs(func(e *insolar.Node, c fuzz.Continue) {
    81  			e.ID = gen.Reference()
    82  			e.Role = core.StaticRoleLightMaterial
    83  		})
    84  		f.NumElements(5, 10).NilChance(0).Fuzz(&materials)
    85  	}
    86  	all = append(virtuals, materials...)
    87  	pulse := gen.PulseNumber()
    88  
    89  	t.Run("returns correct nodes", func(t *testing.T) {
    90  		nodeStorage := NewStorage()
    91  		nodeStorage.nodes[pulse] = all
    92  		{
    93  			result, err := nodeStorage.InRole(pulse, core.StaticRoleVirtual)
    94  			assert.NoError(t, err)
    95  			assert.Equal(t, virtuals, result)
    96  		}
    97  		{
    98  			result, err := nodeStorage.InRole(pulse, core.StaticRoleLightMaterial)
    99  			assert.NoError(t, err)
   100  			assert.Equal(t, materials, result)
   101  		}
   102  	})
   103  
   104  	t.Run("returns nil when empty nodes", func(t *testing.T) {
   105  		nodeStorage := NewStorage()
   106  		nodeStorage.nodes[pulse] = nil
   107  		result, err := nodeStorage.InRole(pulse, core.StaticRoleVirtual)
   108  		assert.NoError(t, err)
   109  		assert.Nil(t, result)
   110  	})
   111  
   112  	t.Run("returns error when no nodes", func(t *testing.T) {
   113  		nodeStorage := NewStorage()
   114  		result, err := nodeStorage.InRole(pulse, core.StaticRoleVirtual)
   115  		assert.Equal(t, core.ErrNoNodes, err)
   116  		assert.Nil(t, result)
   117  	})
   118  }
   119  
   120  func TestStorage_Set(t *testing.T) {
   121  	t.Parallel()
   122  
   123  	var nodes []insolar.Node
   124  	f := fuzz.New().Funcs(func(e *insolar.Node, c fuzz.Continue) {
   125  		e.ID = gen.Reference()
   126  	})
   127  	f.NumElements(5, 10).NilChance(0).Fuzz(&nodes)
   128  	pulse := gen.PulseNumber()
   129  
   130  	t.Run("saves correct nodes", func(t *testing.T) {
   131  		nodeStorage := NewStorage()
   132  		err := nodeStorage.Set(pulse, nodes)
   133  		assert.NoError(t, err)
   134  		assert.Equal(t, nodes, nodeStorage.nodes[pulse])
   135  	})
   136  
   137  	t.Run("saves nil if empty nodes", func(t *testing.T) {
   138  		nodeStorage := NewStorage()
   139  		err := nodeStorage.Set(pulse, []insolar.Node{})
   140  		assert.NoError(t, err)
   141  		assert.Nil(t, nodeStorage.nodes[pulse])
   142  	})
   143  
   144  	t.Run("returns error when saving with the same pulse", func(t *testing.T) {
   145  		nodeStorage := NewStorage()
   146  		_ = nodeStorage.Set(pulse, nodes)
   147  		err := nodeStorage.Set(pulse, nodes)
   148  		assert.Equal(t, storage.ErrOverride, err)
   149  		assert.Equal(t, nodes, nodeStorage.nodes[pulse])
   150  	})
   151  }
   152  
   153  func TestNewStorage_Delete(t *testing.T) {
   154  	t.Parallel()
   155  
   156  	var nodes []insolar.Node
   157  	f := fuzz.New().Funcs(func(e *insolar.Node, c fuzz.Continue) {
   158  		e.ID = gen.Reference()
   159  	})
   160  	f.NumElements(5, 10).NilChance(0).Fuzz(&nodes)
   161  	pulse := gen.PulseNumber()
   162  	nodeStorage := NewStorage()
   163  	nodeStorage.nodes[pulse] = nodes
   164  
   165  	t.Run("removes nodes for pulse", func(t *testing.T) {
   166  		{
   167  			result, err := nodeStorage.All(pulse)
   168  			assert.NoError(t, err)
   169  			assert.Equal(t, nodes, result)
   170  		}
   171  		{
   172  			nodeStorage.Delete(pulse)
   173  			result, err := nodeStorage.All(pulse)
   174  			assert.Equal(t, core.ErrNoNodes, err)
   175  			assert.Nil(t, result)
   176  		}
   177  	})
   178  }