Skip to content

Commit ce1814b

Browse files
committed
[FAB-14923] remove WriteJavaProjectToPackage
A chaincode language specific function should not be defined next to the functions it uses simply because it calls them. Removed WriteJavaProjectToPackage and used the underlying implementation in platforms/java package. Change-Id: I46193cfa8d7a48cf186be61c77abcebef132fc8a Signed-off-by: Matthew Sykes <sykesmat@us.ibm.com>
1 parent 283c3a4 commit ce1814b

File tree

4 files changed

+52
-111
lines changed

4 files changed

+52
-111
lines changed

core/chaincode/platforms/java/platform.go

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Copyright DTCC 2016 All Rights Reserved.
33
44
SPDX-License-Identifier: Apache-2.0
55
*/
6+
67
package java
78

89
import (
@@ -26,8 +27,7 @@ import (
2627
var logger = flogging.MustGetLogger("chaincode.platform.java")
2728

2829
// Platform for java chaincodes in java
29-
type Platform struct {
30-
}
30+
type Platform struct{}
3131

3232
// Name returns the name of this platform
3333
func (javaPlatform *Platform) Name() string {
@@ -63,13 +63,11 @@ func (javaPlatform *Platform) ValidateCodePackage(code []byte) error {
6363

6464
for {
6565
header, err := tr.Next()
66+
if err == io.EOF {
67+
break
68+
}
6669
if err != nil {
67-
if err == io.EOF {
68-
// We only get here if there are no more entries to scan
69-
break
70-
} else {
71-
return err
72-
}
70+
return err
7371
}
7472

7573
// --------------------------------------------------------------------------------------
@@ -97,38 +95,34 @@ func (javaPlatform *Platform) ValidateCodePackage(code []byte) error {
9795

9896
// WritePackage writes the java chaincode package
9997
func (javaPlatform *Platform) GetDeploymentPayload(path string) ([]byte, error) {
100-
10198
logger.Debugf("Packaging java project from path %s", path)
102-
var err error
10399

104-
// --------------------------------------------------------------------------------------
105-
// Write out our tar package
106-
// --------------------------------------------------------------------------------------
107-
payload := bytes.NewBuffer(nil)
108-
gw := gzip.NewWriter(payload)
109-
tw := tar.NewWriter(gw)
110-
111-
folder := path
112-
if folder == "" {
100+
if path == "" {
113101
logger.Error("ChaincodeSpec's path cannot be empty")
114102
return nil, errors.New("ChaincodeSpec's path cannot be empty")
115103
}
116104

117105
// trim trailing slash if it exists
118-
if folder[len(folder)-1] == '/' {
119-
folder = folder[:len(folder)-1]
106+
if path[len(path)-1] == '/' {
107+
path = path[:len(path)-1]
120108
}
121109

122-
if err = cutil.WriteJavaProjectToPackage(tw, folder); err != nil {
110+
buf := &bytes.Buffer{}
111+
gw := gzip.NewWriter(buf)
112+
tw := tar.NewWriter(gw)
123113

114+
excludedDirs := []string{"target", "build", "out"}
115+
excludedFileTypes := map[string]bool{".class": true}
116+
err := cutil.WriteFolderToTarPackage(tw, path, excludedDirs, nil, excludedFileTypes)
117+
if err != nil {
124118
logger.Errorf("Error writing java project to tar package %s", err)
125-
return nil, fmt.Errorf("Error writing Chaincode package contents: %s", err)
119+
return nil, fmt.Errorf("failed to create chaincode package: %s", err)
126120
}
127121

128122
tw.Close()
129123
gw.Close()
130124

131-
return payload.Bytes(), nil
125+
return buf.Bytes(), nil
132126
}
133127

134128
func (javaPlatform *Platform) GenerateDockerfile() (string, error) {

core/chaincode/platforms/java/java_test.go renamed to core/chaincode/platforms/java/platform_test.go

Lines changed: 34 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"bytes"
1212
"compress/gzip"
1313
"fmt"
14+
"io"
1415
"os"
1516
"strings"
1617
"testing"
@@ -22,18 +23,36 @@ import (
2223
pb "github.com/hyperledger/fabric/protos/peer"
2324
"github.com/spf13/viper"
2425
"github.com/stretchr/testify/assert"
26+
"github.com/stretchr/testify/require"
2527
)
2628

27-
const chaincodePathFolder = "testdata"
28-
const chaincodePathFolderGradle = chaincodePathFolder + "/gradle"
29+
const chaincodePathFolderGradle = "testdata/gradle"
2930

3031
var spec = &pb.ChaincodeSpec{
3132
Type: pb.ChaincodeSpec_JAVA,
3233
ChaincodeId: &pb.ChaincodeID{
3334
Name: "ssample",
34-
Path: chaincodePathFolderGradle},
35+
Path: chaincodePathFolderGradle,
36+
},
3537
Input: &pb.ChaincodeInput{
36-
Args: [][]byte{[]byte("f")}}}
38+
Args: [][]byte{
39+
[]byte("f"),
40+
},
41+
},
42+
}
43+
44+
func TestMain(m *testing.M) {
45+
viper.SetConfigName("core")
46+
viper.SetEnvPrefix("CORE")
47+
configtest.AddDevConfigPath(nil)
48+
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
49+
viper.AutomaticEnv()
50+
if err := viper.ReadInConfig(); err != nil {
51+
fmt.Printf("could not read config %s\n", err)
52+
os.Exit(-1)
53+
}
54+
os.Exit(m.Run())
55+
}
3756

3857
func TestValidatePath(t *testing.T) {
3958
platform := java.Platform{}
@@ -84,25 +103,20 @@ func TestGetDeploymentPayload(t *testing.T) {
84103
assert.NoError(t, err)
85104
assert.NotZero(t, len(payload))
86105

87-
buildFileFound := false
88-
settingsFileFound := false
89-
pomFileFound := false
90-
srcFileFound := false
91-
92106
is := bytes.NewReader(payload)
93107
gr, err := gzip.NewReader(is)
94-
if err != nil {
95-
assert.Failf(t, "Can't open zip stream %s", err.Error())
96-
}
108+
require.NoError(t, err, "failed to open zip stream")
97109
defer gr.Close()
98110

99111
tr := tar.NewReader(gr)
100112

113+
contents := map[string]bool{}
101114
for {
102115
header, err := tr.Next()
103-
if err != nil {
116+
if err == io.EOF {
104117
break
105118
}
119+
assert.NoError(t, err)
106120

107121
if strings.Contains(header.Name, ".class") {
108122
assert.Fail(t, "Result package can't contain class file")
@@ -113,24 +127,14 @@ func TestGetDeploymentPayload(t *testing.T) {
113127
if strings.Contains(header.Name, "build/") {
114128
assert.Fail(t, "Result package can't contain build folder")
115129
}
116-
if strings.Contains(header.Name, "src/build.gradle") {
117-
buildFileFound = true
118-
}
119-
if strings.Contains(header.Name, "src/settings.gradle") {
120-
settingsFileFound = true
121-
}
122-
if strings.Contains(header.Name, "src/pom.xml") {
123-
pomFileFound = true
124-
}
125-
if strings.Contains(header.Name, "src/main/java/example/ExampleCC.java") {
126-
srcFileFound = true
127-
}
130+
contents[header.Name] = true
128131
}
129-
assert.True(t, buildFileFound, "Can't find build.gradle file in tar")
130-
assert.True(t, settingsFileFound, "Can't find settings.gradle file in tar")
131-
assert.True(t, pomFileFound, "Can't find pom.xml file in tar")
132-
assert.True(t, srcFileFound, "Can't find example.cc file in tar")
133-
assert.NoError(t, err, "Error while scanning tar file")
132+
133+
// generated from observed behavior
134+
assert.Contains(t, contents, "src/build.gradle")
135+
assert.Contains(t, contents, "src/pom.xml")
136+
assert.Contains(t, contents, "src/settings.gradle")
137+
assert.Contains(t, contents, "src/src/main/java/example/ExampleCC.java")
134138
}
135139

136140
func TestGenerateDockerfile(t *testing.T) {
@@ -177,19 +181,6 @@ func TestGenerateDockerBuild(t *testing.T) {
177181
assert.NoError(t, err)
178182
}
179183

180-
func TestMain(m *testing.M) {
181-
viper.SetConfigName("core")
182-
viper.SetEnvPrefix("CORE")
183-
configtest.AddDevConfigPath(nil)
184-
viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
185-
viper.AutomaticEnv()
186-
if err := viper.ReadInConfig(); err != nil {
187-
fmt.Printf("could not read config %s\n", err)
188-
os.Exit(-1)
189-
}
190-
os.Exit(m.Run())
191-
}
192-
193184
func generateMockPackegeBytes(fileName string, mode int64) ([]byte, error) {
194185
var zeroTime time.Time
195186
codePackage := bytes.NewBuffer(nil)

core/container/util/writer.go

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -144,24 +144,6 @@ func WriteFolderToTarPackage(tw *tar.Writer, srcPath string, excludeDirs []strin
144144
return nil
145145
}
146146

147-
//Package Java project to tar file from the source path
148-
func WriteJavaProjectToPackage(tw *tar.Writer, srcPath string) error {
149-
150-
vmLogger.Debugf("Packaging Java project from path %s", srcPath)
151-
152-
if err := WriteFolderToTarPackage(tw, srcPath, []string{"target", "build", "out"}, nil, javaExcludeFileTypes); err != nil {
153-
154-
vmLogger.Errorf("Error writing folder to tar package %s", err)
155-
return err
156-
}
157-
// Write the tar file out
158-
if err := tw.Close(); err != nil {
159-
return err
160-
}
161-
return nil
162-
163-
}
164-
165147
//WriteFileToPackage writes a file to the tarball
166148
func WriteFileToPackage(localpath string, packagepath string, tw *tar.Writer) error {
167149
vmLogger.Debug("Writing file to tarball:", packagepath)

core/container/util/writer_test.go

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -237,32 +237,6 @@ func Test_WriteFolderToTarPackageFailure3(t *testing.T) {
237237
gw.Close()
238238
}
239239

240-
func Test_WriteJavaProjectToPackage(t *testing.T) {
241-
inputbuf := bytes.NewBuffer(nil)
242-
gw := gzip.NewWriter(inputbuf)
243-
tw := tar.NewWriter(gw)
244-
245-
srcPath := filepath.Join("testdata", "sourcefiles")
246-
assert.FileExists(t, filepath.Join(srcPath, "src", "Hello.class"))
247-
248-
err := WriteJavaProjectToPackage(tw, srcPath)
249-
assert.NoError(t, err, "Error writing java project to package")
250-
251-
// Close the tar writer and call WriteFileToPackage again, this should
252-
// return an error
253-
tw.Close()
254-
gw.Close()
255-
256-
entries := tarContents(t, inputbuf.Bytes())
257-
assert.Contains(t, entries, "META-INF/statedb/couchdb/indexes/indexOwner.json")
258-
assert.Contains(t, entries, "src/artifact.xml")
259-
assert.Contains(t, entries, "src/src/Hello.java")
260-
assert.NotContains(t, entries, "src/src/Hello.class")
261-
262-
err = WriteJavaProjectToPackage(tw, srcPath)
263-
assert.Error(t, err, "WriteJavaProjectToPackage was called with closed writer, should have failed")
264-
}
265-
266240
func Test_WriteBytesToPackage(t *testing.T) {
267241
inputbuf := bytes.NewBuffer(nil)
268242
tw := tar.NewWriter(inputbuf)

0 commit comments

Comments
 (0)