Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions tools/cryptogen/config_block.go
Original file line number Diff line number Diff line change
Expand Up @@ -287,10 +287,10 @@ func createConsenter(o *OrganizationParameters, ids []uint32) ([]*configtxgen.Co
func getOrgPath(o *OrganizationParameters) string {
switch orgOU(o) {
case PeerOU:
return path.Join(PeerOrganizationsDir, o.Name)
return path.Join(PeerOrganizationsDir, o.Domain)
case OrdererOU:
return path.Join(OrdererOrganizationsDir, o.Name)
return path.Join(OrdererOrganizationsDir, o.Domain)
default:
return path.Join(GenericOrganizationsDir, o.Name)
return path.Join(GenericOrganizationsDir, o.Domain)
}
}
28 changes: 14 additions & 14 deletions tools/cryptogen/config_block_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,15 @@ func TestMakeConfig(t *testing.T) {
4: "peer-org-4",
}
orgDirs := map[int]string{
1: filepath.Join(GenericOrganizationsDir, orgNames[1]),
2: filepath.Join(OrdererOrganizationsDir, orgNames[2]),
3: filepath.Join(PeerOrganizationsDir, orgNames[3]),
4: filepath.Join(PeerOrganizationsDir, orgNames[4]),
1: filepath.Join(GenericOrganizationsDir, orgNames[1]+".com"),
2: filepath.Join(OrdererOrganizationsDir, orgNames[2]+".com"),
3: filepath.Join(PeerOrganizationsDir, orgNames[3]+".com"),
4: filepath.Join(PeerOrganizationsDir, orgNames[4]+".com"),
}
// Add all users.
for orgDir := range maps.Values(orgDirs) {
for _, n := range []string{"client", "Admin"} {
expectedDirs = append(expectedDirs, filepath.Join(orgDir, "users", n+"@"+path.Base(orgDir)+".com", "msp"))
expectedDirs = append(expectedDirs, filepath.Join(orgDir, "users", n+"@"+path.Base(orgDir), "msp"))
}
}
// Add all committer nodes to the peer organizations.
Expand Down Expand Up @@ -216,9 +216,9 @@ func TestMakeConfig(t *testing.T) {
orgNames[5] = "peer-org-5"
orgNames[6] = "peer-org-6"
orgNames[7] = "peer-org-7"
orgDirs[5] = filepath.Join(PeerOrganizationsDir, orgNames[5])
orgDirs[6] = filepath.Join(PeerOrganizationsDir, orgNames[6])
orgDirs[7] = filepath.Join(PeerOrganizationsDir, orgNames[7])
orgDirs[5] = filepath.Join(PeerOrganizationsDir, orgNames[5]+".com")
orgDirs[6] = filepath.Join(PeerOrganizationsDir, orgNames[6]+".com")
orgDirs[7] = filepath.Join(PeerOrganizationsDir, orgNames[7]+".com")
endorsers = append(endorsers, loadMSPs(t, endorserDir(5), endorserDir(6), endorserDir(7))...)

requireSign(t, bundle2, "Application/Endorsement", endorsers...)
Expand All @@ -240,12 +240,12 @@ func TestCryptoGenTLS(t *testing.T) {
testDir := t.TempDir()
defaultConfigBlock(t, testDir)

org2Node := path.Join(testDir, OrdererOrganizationsDir, "ordering-org-2", OrdererNodesDir, "assembler")
org3Node := path.Join(testDir, PeerOrganizationsDir, "peer-org-3", PeerNodesDir, "committer")
org2Node := path.Join(testDir, OrdererOrganizationsDir, "ordering-org-2.com", OrdererNodesDir, "assembler")
org3Node := path.Join(testDir, PeerOrganizationsDir, "peer-org-3.com", PeerNodesDir, "committer")

org2Ca := buildCertPool(t, path.Join(testDir, OrdererOrganizationsDir, "ordering-org-2",
org2Ca := buildCertPool(t, path.Join(testDir, OrdererOrganizationsDir, "ordering-org-2.com",
"tlsca", "tlsordering-org-2-CA-cert.pem"))
org3Ca := buildCertPool(t, path.Join(testDir, PeerOrganizationsDir, "peer-org-3",
org3Ca := buildCertPool(t, path.Join(testDir, PeerOrganizationsDir, "peer-org-3.com",
"tlsca", "tlspeer-org-3-CA-cert.pem"))

address := grpcServer(t, org2Node, org3Ca)
Expand All @@ -260,8 +260,8 @@ func TestConfigBlockTLS(t *testing.T) {
t.Parallel()
testDir := t.TempDir()
_, block, _ := defaultConfigBlock(t, testDir)
org2Node := path.Join(testDir, OrdererOrganizationsDir, "ordering-org-2", OrdererNodesDir, "assembler")
org3Node := path.Join(testDir, PeerOrganizationsDir, "peer-org-3", PeerNodesDir, "committer")
org2Node := path.Join(testDir, OrdererOrganizationsDir, "ordering-org-2.com", OrdererNodesDir, "assembler")
org3Node := path.Join(testDir, PeerOrganizationsDir, "peer-org-3.com", PeerNodesDir, "committer")

bundle := readBundle(t, block)

Expand Down
2 changes: 1 addition & 1 deletion tools/cryptogen/org_crypto.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ func allTrees(c *cryptoTree) []*orgCryptoTree {

// newOrgCryptoTree creates a new organization tree.
func newOrgCryptoTree(root string, org *OrgSpec) *orgCryptoTree {
root = filepath.Join(root, org.Name)
root = filepath.Join(root, org.Domain)
return &orgCryptoTree{
mspTree: newMspTree(root),
OrgSpec: org,
Expand Down
69 changes: 39 additions & 30 deletions utils/testcrypto/load_crypto.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ import (
)

// GetPeersIdentities returns the peers' identities from a crypto path.
func GetPeersIdentities(cryptoPath string) ([]msp.SigningIdentity, error) {
return GetSigningIdentities(GetPeersMspDirs(cryptoPath)...)
func GetPeersIdentities(artifactsPath string) ([]msp.SigningIdentity, error) {
return GetSigningIdentities(GetPeersMspDirs(artifactsPath)...)
}

// GetConsenterIdentities returns the orderer consenters identities from a crypto path.
func GetConsenterIdentities(cryptoPath string) ([]msp.SigningIdentity, error) {
return GetSigningIdentities(GetOrdererMspDirs(cryptoPath)...)
func GetConsenterIdentities(artifactsPath string) ([]msp.SigningIdentity, error) {
return GetSigningIdentities(GetConsenterMspDirs(artifactsPath)...)
}

// GetSigningIdentities loads signing identities from the given MSP directories.
Expand All @@ -46,36 +46,41 @@ func GetSigningIdentities(mspDirs ...*msp.DirLoadParameters) ([]msp.SigningIdent
// GetPeersMspDirs returns the peers' MSP directory path.
// It discovers the client user directory by scanning the users/ directory
// for an entry matching "client@*", rather than assuming a specific domain suffix.
func GetPeersMspDirs(cryptoPath string) []*msp.DirLoadParameters {
peerOrgPath := path.Join(cryptoPath, cryptogen.PeerOrganizationsDir)
peerMspDirs := GetMspDirs(peerOrgPath)
for _, mspItem := range peerMspDirs {
usersDir := path.Join(mspItem.MspDir, "users")
entries, _ := os.ReadDir(usersDir)
func GetPeersMspDirs(artifactsPath string) []*msp.DirLoadParameters {
peerOrgPath := path.Join(artifactsPath, cryptogen.PeerOrganizationsDir)
return getNodeMspDirs(peerOrgPath, "users", "client@")
}

// GetConsenterMspDirs returns the orderers' MSP directory path.
func GetConsenterMspDirs(artifactsPath string) []*msp.DirLoadParameters {
ordererOrgPath := path.Join(artifactsPath, cryptogen.OrdererOrganizationsDir)
return getNodeMspDirs(ordererOrgPath, "orderers", "consenter")
}

// getNodeMspDirs returns the MSP directory for the given node type.
func getNodeMspDirs(orgsPath, nodeSubDir, nodePrefix string) []*msp.DirLoadParameters {
orgMspDirs := getMspDirs(orgsPath)
nodeMspDirs := make([]*msp.DirLoadParameters, 0, len(orgMspDirs))
for _, mspItem := range orgMspDirs {
subDir := path.Join(mspItem.MspDir, nodeSubDir)
entries, _ := os.ReadDir(subDir)
for _, entry := range entries {
if entry.IsDir() && strings.HasPrefix(entry.Name(), "client@") {
mspItem.MspDir = path.Join(usersDir, entry.Name(), "msp")
break
if !entry.IsDir() || !strings.HasPrefix(entry.Name(), nodePrefix) {
continue
}
nodeMspDirs = append(nodeMspDirs, &msp.DirLoadParameters{
MspName: mspItem.MspName,
MspDir: path.Join(subDir, entry.Name(), "msp"),
})
break
}
}
return peerMspDirs
return nodeMspDirs
}

// GetOrdererMspDirs returns the orderers' MSP directory path.
func GetOrdererMspDirs(cryptoPath string) []*msp.DirLoadParameters {
ordererOrgPath := path.Join(cryptoPath, cryptogen.OrdererOrganizationsDir)
ordererMspDirs := GetMspDirs(ordererOrgPath)
for _, mspItem := range ordererMspDirs {
nodeName := "consenter-" + mspItem.MspName[len("orderer-"):]
mspItem.MspDir = path.Join(mspItem.MspDir, "orderers", nodeName, "msp")
}
return ordererMspDirs
}

// GetMspDirs returns the MSP dir parameter per organization in the path.
func GetMspDirs(targetPath string) []*msp.DirLoadParameters {
dir, err := os.ReadDir(targetPath)
// getMspDirs returns the MSP dir parameter per organization in the path.
func getMspDirs(orgsPath string) []*msp.DirLoadParameters {
dir, err := os.ReadDir(orgsPath)
if err != nil {
return nil
}
Expand All @@ -84,10 +89,14 @@ func GetMspDirs(targetPath string) []*msp.DirLoadParameters {
if !dirEntry.IsDir() {
continue
}
orgName := dirEntry.Name()
dirName := dirEntry.Name()
orgName := dirName
if strings.HasSuffix(dirName, ".com") {
orgName = dirName[:len(dirName)-4]
}
mspDirs = append(mspDirs, &msp.DirLoadParameters{
MspName: orgName,
MspDir: path.Join(targetPath, orgName),
MspDir: path.Join(orgsPath, dirName),
})
}
return mspDirs
Expand Down
43 changes: 22 additions & 21 deletions utils/testcrypto/testcrypto_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ func TestCreateOrExtendConfigBlockWithCrypto(t *testing.T) { //nolint:gocognit
require.NoError(t, err)

// Verify orderer node directories exist with correct names
ordererOrgPath := filepath.Join(cryptoPath, cryptogen.OrdererOrganizationsDir, "orderer-org-0", "orderers")
ordererOrgPath := filepath.Join(cryptoPath, cryptogen.OrdererOrganizationsDir, "orderer-org-0.com", "orderers")
require.DirExists(t, ordererOrgPath)

entries, err := os.ReadDir(ordererOrgPath)
Expand Down Expand Up @@ -351,7 +351,7 @@ func TestGetSigningIdentities(t *testing.T) {
require.NoError(t, err)

peerMspDirs := GetPeersMspDirs(cryptoPath)
ordererMspDirs := GetOrdererMspDirs(cryptoPath)
ordererMspDirs := GetConsenterMspDirs(cryptoPath)
allMspDirs := make([]*msp.DirLoadParameters, 0, len(peerMspDirs)+len(ordererMspDirs))
allMspDirs = append(allMspDirs, peerMspDirs...)
allMspDirs = append(allMspDirs, ordererMspDirs...)
Expand Down Expand Up @@ -437,7 +437,7 @@ func TestMspDirectoryRetrieval(t *testing.T) {
})
require.NoError(t, err)

mspDirs := GetOrdererMspDirs(cryptoPath)
mspDirs := GetConsenterMspDirs(cryptoPath)
require.Len(t, mspDirs, 3)

for i, mspDir := range mspDirs {
Expand Down Expand Up @@ -473,8 +473,8 @@ func TestMspDirectoryRetrieval(t *testing.T) {
t.Parallel()

// Non-existent paths
require.Nil(t, GetPeersMspDirs("/non/existent/path"))
require.Nil(t, GetOrdererMspDirs("/non/existent/path"))
require.Empty(t, GetPeersMspDirs("/non/existent/path"))
require.Empty(t, GetConsenterMspDirs("/non/existent/path"))

// Empty directories
cryptoPath := t.TempDir()
Expand All @@ -485,7 +485,7 @@ func TestMspDirectoryRetrieval(t *testing.T) {
require.NoError(t, os.MkdirAll(ordererOrgPath, 0o750))

require.Empty(t, GetPeersMspDirs(cryptoPath))
require.Empty(t, GetOrdererMspDirs(cryptoPath))
require.Empty(t, GetConsenterMspDirs(cryptoPath))
})
}

Expand All @@ -503,9 +503,7 @@ func TestGetMspDirs(t *testing.T) {
})
require.NoError(t, err)

peerOrgPath := filepath.Join(cryptoPath, cryptogen.PeerOrganizationsDir)
mspDirs := GetMspDirs(peerOrgPath)

mspDirs := GetPeersMspDirs(cryptoPath)
require.Len(t, mspDirs, 2)
for _, mspDir := range mspDirs {
require.NotNil(t, mspDir)
Expand All @@ -516,42 +514,45 @@ func TestGetMspDirs(t *testing.T) {

t.Run("directory filtering", func(t *testing.T) {
t.Parallel()
dirPath := t.TempDir()
cryptoPath := t.TempDir()

_, err := CreateOrExtendConfigBlockWithCrypto(cryptoPath, &ConfigBlock{
ChannelID: "test-channel",
PeerOrganizationCount: 3,
})
require.NoError(t, err)

// Create mixed content
require.NoError(t, os.WriteFile(filepath.Join(dirPath, "file.txt"), []byte("content"), 0o600))
require.NoError(t, os.Mkdir(filepath.Join(dirPath, "org1"), 0o750))
require.NoError(t, os.Mkdir(filepath.Join(dirPath, "org2"), 0o750))
require.NoError(t, os.Mkdir(filepath.Join(dirPath, "org3"), 0o750))
require.NoError(t, os.WriteFile(filepath.Join(cryptoPath, "file.txt"), []byte("content"), 0o600))

mspDirs := GetMspDirs(dirPath)
mspDirs := GetPeersMspDirs(cryptoPath)
require.Len(t, mspDirs, 3)

orgNames := make(map[string]any)
for _, mspDir := range mspDirs {
orgNames[mspDir.MspName] = nil
}

require.Contains(t, orgNames, "org1")
require.Contains(t, orgNames, "org2")
require.Contains(t, orgNames, "org3")
require.Contains(t, orgNames, "peer-org-0")
require.Contains(t, orgNames, "peer-org-1")
require.Contains(t, orgNames, "peer-org-2")
})

t.Run("edge cases", func(t *testing.T) {
t.Parallel()

// Non-existent path
require.Nil(t, GetMspDirs("/non/existent/path"))
require.Empty(t, getMspDirs("/non/existent/path"))

// Empty directory
emptyPath := t.TempDir()
require.Empty(t, GetMspDirs(emptyPath))
require.Empty(t, getMspDirs(emptyPath))

// Directory with only files
filesOnlyPath := t.TempDir()
require.NoError(t, os.WriteFile(filepath.Join(filesOnlyPath, "file1.txt"), []byte("content"), 0o600))
require.NoError(t, os.WriteFile(filepath.Join(filesOnlyPath, "file2.txt"), []byte("content"), 0o600))
require.Empty(t, GetMspDirs(filesOnlyPath))
require.Empty(t, getMspDirs(filesOnlyPath))
})
}

Expand Down
Loading