разыменование нулевого указателя при запуске тестов с vault.NewTestCluster в пользовательском плагине Vault - PullRequest
0 голосов
/ 09 ноября 2018

Я разрабатываю пользовательский плагин, представляющий собой бэкэнд PKI с импортом в другие программные функции (https://github.com/Venafi/vault-pki-monitor-venafi).
Этот плагин имеет логику для запуска очереди импорта в процедуре go при создании роли и отслеживания новых сертификатов в роли для импорта их во внешнюю систему:
- https://github.com/Venafi/vault-pki-monitor-venafi/blob/adding-tests-for-import/plugin/pki/path_import_queue.go#L83 - https://github.com/Venafi/vault-pki-monitor-venafi/blob/adding-tests-for-import/plugin/pki/path_roles.go#L606-L610 Чтобы быть уверенным, что для каждой роли существует только одна подпрограмма импорта, я создаю путь блокировки и устанавливаю для него значение true: https://github.com/Venafi/vault-pki-monitor-venafi/blob/adding-tests-for-import/plugin/pki/path_import_queue.go#L88-L153 Если путь блокировки не существует, я предполагаю, что это неверно: https://github.com/Venafi/vault-pki-monitor-venafi/blob/adding-tests-for-import/plugin/pki/path_import_queue.go#L112-L114

Все работает нормально, когда я тестирую его с бинарным хранилищем. Но когда я пытался реализовать тесты с использованием vault.NewTestCluster - https://github.com/Venafi/vault-pki-monitor-venafi/blob/adding-tests-for-import/plugin/pki/path_import_queue_test.go#L16-L63 Я получил эту ошибку:

2018-11-08T15:24:58.004+0300 [DEBUG] core: forwarding: error sending echo request to active node: error="rpc error: code = DeadlineExceeded desc = context deadline exceeded"
2018/11/08 15:25:23 Locking import mutex on backend to safely change data for import lock
2018/11/08 15:25:23 Getting import lock for path import-queue-lock/import
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x112863d]


goroutine 557 [running]:
github.com/Venafi/vault-pki-monitor-venafi/plugin/pki.(*backend).importToTPP(0xc4202d3360, 0xc4202ebece, 0x6, 0x14fa8e0, 0xc420040170, 0xc420295a40)
 /home/user/src/go/src/github.com/Venafi/vault-pki-monitor-venafi/plugin/pki/path_import_queue.go:105 +0x2fd
created by github.com/Venafi/vault-pki-monitor-venafi/plugin/pki.(*backend).pathRoleCreate
 /home/user/src/go/src/github.com/Venafi/vault-pki-monitor-venafi/plugin/pki/path_roles.go:609 +0x2a6b

Здесь я получаю сообщение об ошибке (это нормально работает при работе с бинарным хранилищем, только тесты не выполняются):

log.Printf("Getting import lock for path %s", lockPath)
var importLockEntry *logical.StorageEntry
importLockEntry, err = req.Storage.Get(ctx, lockPath)
if err != nil {
   log.Printf("Unable to get lock import for role %s:\n %s\n", roleName, err)
   unlock()
   return
}

if importLockEntry == nil || importLockEntry.Value == nil || len(importLockEntry.Value) == 0 {
   log.Println("Role lock is empty, assuming it is false")
   importLocked = false
} else {
   log.Printf("Got from storage %s", string(importLockEntry.Value))
   il := string(importLockEntry.Value)
   log.Printf("Parsing %s to bool", il)
   importLocked, err = strconv.ParseBool(il)
   if err != nil {
      log.Printf("Unable to parse lock import %s to bool for role %s:\n %s\n", il, roleName, err)
      unlock()
      return
   }
}

Вот как это выглядит в отладчике: https://13027918075534280191.googlegroups.com/attach/5de3757908e52/Screenshot%20from%202018-11-09%2013-24-52.png

importLockEntry - ноль, но я проверяю его перед использованием, так что все должно быть хорошо, как я понимаю. Однако я испытываю панику прямо на https://github.com/Venafi/vault-pki-monitor-venafi/blob/adding-tests-for-import/plugin/pki/path_import_queue.go#L105 - строке, где я пытаюсь установить переменную.

Итак, чего мне не хватает? Почему, когда я запускаю свой плагин с бинарным хранилищем, он работает нормально, а когда я пытаюсь запустить его с vault.NewTestCluster, он паникует?

...