Skip to content

Commit

Permalink
v2.0.1: Fix incorrect IdTokenType
Browse files Browse the repository at this point in the history
fixes occurrences in:
- reservation.ReserveNow
- remotecontrol.RequestStartTransaction

Signed-off-by: Lorenzo <lorenzo.donini90@gmail.com>
  • Loading branch information
lorenzodonini committed Dec 24, 2022
1 parent e66011a commit b542323
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 60 deletions.
4 changes: 2 additions & 2 deletions ocpp2.0.1/csms.go
Original file line number Diff line number Diff line change
Expand Up @@ -431,7 +431,7 @@ func (cs *csms) PublishFirmware(clientId string, callback func(*firmware.Publish
return cs.SendRequestAsync(clientId, request, genericCallback)
}

func (cs *csms) RequestStartTransaction(clientId string, callback func(*remotecontrol.RequestStartTransactionResponse, error), remoteStartID int, IdToken types.IdTokenType, props ...func(request *remotecontrol.RequestStartTransactionRequest)) error {
func (cs *csms) RequestStartTransaction(clientId string, callback func(*remotecontrol.RequestStartTransactionResponse, error), remoteStartID int, IdToken types.IdToken, props ...func(request *remotecontrol.RequestStartTransactionRequest)) error {
request := remotecontrol.NewRequestStartTransactionRequest(remoteStartID, IdToken)
for _, fn := range props {
fn(request)
Expand Down Expand Up @@ -461,7 +461,7 @@ func (cs *csms) RequestStopTransaction(clientId string, callback func(*remotecon
return cs.SendRequestAsync(clientId, request, genericCallback)
}

func (cs *csms) ReserveNow(clientId string, callback func(*reservation.ReserveNowResponse, error), id int, expiryDateTime *types.DateTime, idToken types.IdTokenType, props ...func(request *reservation.ReserveNowRequest)) error {
func (cs *csms) ReserveNow(clientId string, callback func(*reservation.ReserveNowResponse, error), id int, expiryDateTime *types.DateTime, idToken types.IdToken, props ...func(request *reservation.ReserveNowRequest)) error {
request := reservation.NewReserveNowRequest(id, expiryDateTime, idToken)
for _, fn := range props {
fn(request)
Expand Down
6 changes: 3 additions & 3 deletions ocpp2.0.1/remotecontrol/request_start_transaction.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,9 @@ func isValidRequestStartStopStatus(fl validator.FieldLevel) bool {
type RequestStartTransactionRequest struct {
EvseID *int `json:"evseId,omitempty" validate:"omitempty,gt=0"`
RemoteStartID int `json:"remoteStartId" validate:"gte=0"`
IDToken types.IdTokenType `json:"idToken" validate:"idTokenType"`
IDToken types.IdToken `json:"idToken" validate:"idTokenType"`
ChargingProfile *types.ChargingProfile `json:"chargingProfile,omitempty"`
GroupIdToken types.IdTokenType `json:"groupIdToken,omitempty" validate:"omitempty,idTokenType"`
GroupIdToken *types.IdToken `json:"groupIdToken,omitempty" validate:"omitempty,dive"`
}

// This field definition of the RequestStartTransaction response payload, sent by the Charging Station to the CSMS in response to a RequestStartTransactionRequest.
Expand Down Expand Up @@ -77,7 +77,7 @@ func (c RequestStartTransactionResponse) GetFeatureName() string {
}

// Creates a new RequestStartTransactionRequest, containing all required fields. Optional fields may be set afterwards.
func NewRequestStartTransactionRequest(remoteStartID int, IdToken types.IdTokenType) *RequestStartTransactionRequest {
func NewRequestStartTransactionRequest(remoteStartID int, IdToken types.IdToken) *RequestStartTransactionRequest {
return &RequestStartTransactionRequest{RemoteStartID: remoteStartID, IDToken: IdToken}
}

Expand Down
14 changes: 7 additions & 7 deletions ocpp2.0.1/reservation/reserve_now.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,12 +78,12 @@ func isValidConnectorType(fl validator.FieldLevel) bool {

// The field definition of the ReserveNow request payload sent by the CSMS to the Charging Station.
type ReserveNowRequest struct {
ID int `json:"id" validate:"gte=0"` // ID of reservation
ExpiryDateTime *types.DateTime `json:"expiryDateTime" validate:"required"`
ConnectorType ConnectorType `json:"connectorType,omitempty" validate:"omitempty,connectorType"`
EvseID *int `json:"evseId,omitempty" validate:"omitempty,gte=0"`
IdToken types.IdTokenType `json:"idToken" validate:"required,idTokenType"`
GroupIdToken types.IdTokenType `json:"groupIdToken,omitempty" validate:"omitempty,idTokenType"`
ID int `json:"id" validate:"gte=0"` // ID of reservation
ExpiryDateTime *types.DateTime `json:"expiryDateTime" validate:"required"`
ConnectorType ConnectorType `json:"connectorType,omitempty" validate:"omitempty,connectorType"`
EvseID *int `json:"evseId,omitempty" validate:"omitempty,gte=0"`
IdToken types.IdToken `json:"idToken" validate:"required,dive"`
GroupIdToken *types.IdToken `json:"groupIdToken,omitempty" validate:"omitempty,dive"`
}

// This field definition of the ReserveNow response payload, sent by the Charging Station to the CSMS in response to a ReserveNowRequest.
Expand Down Expand Up @@ -125,7 +125,7 @@ func (c ReserveNowResponse) GetFeatureName() string {
}

// Creates a new ReserveNowRequest, containing all required fields. Optional fields may be set afterwards.
func NewReserveNowRequest(id int, expiryDateTime *types.DateTime, idToken types.IdTokenType) *ReserveNowRequest {
func NewReserveNowRequest(id int, expiryDateTime *types.DateTime, idToken types.IdToken) *ReserveNowRequest {
return &ReserveNowRequest{ID: id, ExpiryDateTime: expiryDateTime, IdToken: idToken}
}

Expand Down
4 changes: 2 additions & 2 deletions ocpp2.0.1/transactions/transaction_event.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,9 +144,9 @@ type TransactionEventRequest struct {
Offline bool `json:"offline,omitempty"`
NumberOfPhasesUsed *int `json:"numberOfPhasesUsed,omitempty" validate:"omitempty,gte=0"`
CableMaxCurrent *int `json:"cableMaxCurrent,omitempty"` // The maximum current of the connected cable in Ampere (A).
ReservationID *int `json:"reservationId,omitempty"` // The Id of the reservation that terminates as a result of this transaction.
ReservationID *int `json:"reservationId,omitempty"` // The ID of the reservation that terminates as a result of this transaction.
TransactionInfo Transaction `json:"transactionInfo" validate:"required"` // Contains transaction specific information.
IDToken *types.IdToken `json:"idToken,omitempty" validate:"omitempty"`
IDToken *types.IdToken `json:"idToken,omitempty" validate:"omitempty,dive"`
Evse *types.EVSE `json:"evse,omitempty" validate:"omitempty"` // Identifies which evse (and connector) of the Charging Station is used.
MeterValue []types.MeterValue `json:"meterValue,omitempty" validate:"omitempty,dive"` // Contains the relevant meter values.
}
Expand Down
4 changes: 2 additions & 2 deletions ocpp2.0.1/v2.go
Original file line number Diff line number Diff line change
Expand Up @@ -301,11 +301,11 @@ type CSMS interface {
// Publishes a firmware to a local controller, allowing charging stations to download the same firmware from the local controller directly.
PublishFirmware(clientId string, callback func(*firmware.PublishFirmwareResponse, error), location string, checksum string, requestID int, props ...func(request *firmware.PublishFirmwareRequest)) error
// Remotely triggers a transaction to be started on a charging station.
RequestStartTransaction(clientId string, callback func(*remotecontrol.RequestStartTransactionResponse, error), remoteStartID int, IdToken types.IdTokenType, props ...func(request *remotecontrol.RequestStartTransactionRequest)) error
RequestStartTransaction(clientId string, callback func(*remotecontrol.RequestStartTransactionResponse, error), remoteStartID int, IdToken types.IdToken, props ...func(request *remotecontrol.RequestStartTransactionRequest)) error
// Remotely triggers an ongoing transaction to be stopped on a charging station.
RequestStopTransaction(clientId string, callback func(*remotecontrol.RequestStopTransactionResponse, error), transactionID string, props ...func(request *remotecontrol.RequestStopTransactionRequest)) error
// Attempts to reserve a connector for an EV, on a specific charging station.
ReserveNow(clientId string, callback func(*reservation.ReserveNowResponse, error), id int, expiryDateTime *types.DateTime, idToken types.IdTokenType, props ...func(request *reservation.ReserveNowRequest)) error
ReserveNow(clientId string, callback func(*reservation.ReserveNowResponse, error), id int, expiryDateTime *types.DateTime, idToken types.IdToken, props ...func(request *reservation.ReserveNowRequest)) error
// Instructs the Charging Station to reset itself.
Reset(clientId string, callback func(*provisioning.ResetResponse, error), t provisioning.ResetType, props ...func(request *provisioning.ResetRequest)) error
// Sends a local authorization list to a charging station, which can be used for the authorization of idTokens.
Expand Down
46 changes: 25 additions & 21 deletions ocpp2.0.1_test/request_start_transaction_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,17 @@ func (suite *OcppV2TestSuite) TestRequestStartTransactionRequestValidation() {
},
}
var requestTable = []GenericTestEntry{
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdTokenTypeKeyCode, ChargingProfile: &chargingProfile, GroupIdToken: types.IdTokenTypeISO15693}, true},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdTokenTypeKeyCode, ChargingProfile: &chargingProfile}, true},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdTokenTypeKeyCode}, true},
{remotecontrol.RequestStartTransactionRequest{RemoteStartID: 42, IDToken: types.IdTokenTypeKeyCode}, true},
{remotecontrol.RequestStartTransactionRequest{IDToken: types.IdTokenTypeKeyCode}, true},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}, ChargingProfile: &chargingProfile, GroupIdToken: &types.IdToken{IdToken: "1234", Type: types.IdTokenTypeISO15693}}, true},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}, ChargingProfile: &chargingProfile}, true},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}}, true},
{remotecontrol.RequestStartTransactionRequest{RemoteStartID: 42, IDToken: types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}}, true},
{remotecontrol.RequestStartTransactionRequest{IDToken: types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}}, true},
{remotecontrol.RequestStartTransactionRequest{}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(0), RemoteStartID: 42, IDToken: types.IdTokenTypeKeyCode, ChargingProfile: &chargingProfile, GroupIdToken: types.IdTokenTypeISO15693}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: -1, IDToken: types.IdTokenTypeKeyCode, ChargingProfile: &chargingProfile, GroupIdToken: types.IdTokenTypeISO15693}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: "invalidIdToken", ChargingProfile: &chargingProfile, GroupIdToken: types.IdTokenTypeISO15693}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdTokenTypeKeyCode, ChargingProfile: &types.ChargingProfile{}, GroupIdToken: types.IdTokenTypeISO15693}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdTokenTypeKeyCode, ChargingProfile: &chargingProfile, GroupIdToken: "invalidGroupIdToken"}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(0), RemoteStartID: 42, IDToken: types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}, ChargingProfile: &chargingProfile, GroupIdToken: &types.IdToken{IdToken: "1234", Type: types.IdTokenTypeISO15693}}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: -1, IDToken: types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}, ChargingProfile: &chargingProfile, GroupIdToken: &types.IdToken{IdToken: "1234", Type: types.IdTokenTypeISO15693}}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdToken{IdToken: "1234", Type: "invalidIdToken"}, ChargingProfile: &chargingProfile, GroupIdToken: &types.IdToken{IdToken: "1234", Type: types.IdTokenTypeISO15693}}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}, ChargingProfile: &types.ChargingProfile{}, GroupIdToken: &types.IdToken{IdToken: "1234", Type: types.IdTokenTypeISO15693}}, false},
{remotecontrol.RequestStartTransactionRequest{EvseID: newInt(1), RemoteStartID: 42, IDToken: types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}, ChargingProfile: &chargingProfile, GroupIdToken: &types.IdToken{IdToken: "1234", Type: "invalidGroupIdToken"}}, false},
}
ExecuteGenericTestTable(t, requestTable)
}
Expand All @@ -69,7 +69,7 @@ func (suite *OcppV2TestSuite) TestRequestStartTransactionE2EMocked() {
wsUrl := "someUrl"
evseId := newInt(1)
remoteStartID := 42
idToken := types.IdTokenTypeKeyCode
idToken := types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}
schedule := []types.ChargingSchedule{
{
ID: 1,
Expand All @@ -89,12 +89,12 @@ func (suite *OcppV2TestSuite) TestRequestStartTransactionE2EMocked() {
ChargingProfileKind: types.ChargingProfileKindAbsolute,
ChargingSchedule: schedule,
}
groupIdToken := types.IdTokenTypeISO15693
groupIdToken := types.IdToken{IdToken: "1234", Type: types.IdTokenTypeISO15693}
status := remotecontrol.RequestStartStopStatusAccepted
transactionId := "12345"
statusInfo := types.StatusInfo{ReasonCode: "200"}
requestJson := fmt.Sprintf(`[2,"%v","%v",{"evseId":%v,"remoteStartId":%v,"idToken":"%v","chargingProfile":{"id":%v,"stackLevel":%v,"chargingProfilePurpose":"%v","chargingProfileKind":"%v","chargingSchedule":[{"id":%v,"chargingRateUnit":"%v","chargingSchedulePeriod":[{"startPeriod":%v,"limit":%v}]}]},"groupIdToken":"%v"}]`,
messageId, remotecontrol.RequestStartTransactionFeatureName, *evseId, remoteStartID, idToken, chargingProfile.ID, chargingProfile.StackLevel, chargingProfile.ChargingProfilePurpose, chargingProfile.ChargingProfileKind, schedule[0].ID, schedule[0].ChargingRateUnit, schedule[0].ChargingSchedulePeriod[0].StartPeriod, schedule[0].ChargingSchedulePeriod[0].Limit, groupIdToken)
requestJson := fmt.Sprintf(`[2,"%v","%v",{"evseId":%v,"remoteStartId":%v,"idToken":{"idToken":"%s","type":"%s"},"chargingProfile":{"id":%v,"stackLevel":%v,"chargingProfilePurpose":"%v","chargingProfileKind":"%v","chargingSchedule":[{"id":%v,"chargingRateUnit":"%v","chargingSchedulePeriod":[{"startPeriod":%v,"limit":%v}]}]},"groupIdToken":{"idToken":"%s","type":"%s"}}]`,
messageId, remotecontrol.RequestStartTransactionFeatureName, *evseId, remoteStartID, idToken.IdToken, idToken.Type, chargingProfile.ID, chargingProfile.StackLevel, chargingProfile.ChargingProfilePurpose, chargingProfile.ChargingProfileKind, schedule[0].ID, schedule[0].ChargingRateUnit, schedule[0].ChargingSchedulePeriod[0].StartPeriod, schedule[0].ChargingSchedulePeriod[0].Limit, groupIdToken.IdToken, groupIdToken.Type)
responseJson := fmt.Sprintf(`[3,"%v",{"status":"%v","transactionId":"%v","statusInfo":{"reasonCode":"%v"}}]`,
messageId, status, transactionId, statusInfo.ReasonCode)
requestStartTransactionResponse := remotecontrol.NewRequestStartTransactionResponse(status)
Expand All @@ -108,7 +108,8 @@ func (suite *OcppV2TestSuite) TestRequestStartTransactionE2EMocked() {
require.True(t, ok)
assert.Equal(t, *evseId, *request.EvseID)
assert.Equal(t, remoteStartID, request.RemoteStartID)
assert.Equal(t, idToken, request.IDToken)
assert.Equal(t, idToken.IdToken, request.IDToken.IdToken)
assert.Equal(t, idToken.Type, request.IDToken.Type)
assert.Equal(t, chargingProfile.ID, request.ChargingProfile.ID)
assert.Equal(t, chargingProfile.ChargingProfilePurpose, request.ChargingProfile.ChargingProfilePurpose)
assert.Equal(t, chargingProfile.ChargingProfileKind, request.ChargingProfile.ChargingProfileKind)
Expand All @@ -119,6 +120,9 @@ func (suite *OcppV2TestSuite) TestRequestStartTransactionE2EMocked() {
require.Len(t, s.ChargingSchedulePeriod, len(chargingProfile.ChargingSchedule[0].ChargingSchedulePeriod))
assert.Equal(t, chargingProfile.ChargingSchedule[0].ChargingSchedulePeriod[0].Limit, s.ChargingSchedulePeriod[0].Limit)
assert.Equal(t, chargingProfile.ChargingSchedule[0].ChargingSchedulePeriod[0].StartPeriod, s.ChargingSchedulePeriod[0].StartPeriod)
require.NotNil(t, request.GroupIdToken)
assert.Equal(t, groupIdToken.IdToken, request.GroupIdToken.IdToken)
assert.Equal(t, groupIdToken.Type, request.GroupIdToken.Type)
})
setupDefaultCSMSHandlers(suite, expectedCSMSOptions{clientId: wsId, rawWrittenMessage: []byte(requestJson), forwardWrittenMessage: true})
setupDefaultChargingStationHandlers(suite, expectedChargingStationOptions{serverUrl: wsUrl, clientId: wsId, createChannelOnStart: true, channel: channel, rawWrittenMessage: []byte(responseJson), forwardWrittenMessage: true}, handler)
Expand All @@ -137,7 +141,7 @@ func (suite *OcppV2TestSuite) TestRequestStartTransactionE2EMocked() {
}, remoteStartID, idToken, func(request *remotecontrol.RequestStartTransactionRequest) {
request.EvseID = evseId
request.ChargingProfile = &chargingProfile
request.GroupIdToken = groupIdToken
request.GroupIdToken = &groupIdToken
})
require.Nil(t, err)
result := <-resultChannel
Expand All @@ -148,7 +152,7 @@ func (suite *OcppV2TestSuite) TestRequestStartTransactionInvalidEndpoint() {
messageId := defaultMessageId
evseId := newInt(1)
remoteStartID := 42
idToken := types.IdTokenTypeKeyCode
idToken := types.IdToken{IdToken: "1234", Type: types.IdTokenTypeKeyCode}
schedule := []types.ChargingSchedule{
{
ChargingRateUnit: types.ChargingRateUnitAmperes,
Expand All @@ -167,15 +171,15 @@ func (suite *OcppV2TestSuite) TestRequestStartTransactionInvalidEndpoint() {
ChargingProfileKind: types.ChargingProfileKindAbsolute,
ChargingSchedule: schedule,
}
groupIdToken := types.IdTokenTypeISO15693
groupIdToken := types.IdToken{IdToken: "1234", Type: types.IdTokenTypeISO15693}
request := remotecontrol.RequestStartTransactionRequest{
EvseID: evseId,
RemoteStartID: remoteStartID,
IDToken: idToken,
ChargingProfile: &chargingProfile,
GroupIdToken: groupIdToken,
GroupIdToken: &groupIdToken,
}
requestJson := fmt.Sprintf(`[2,"%v","%v",{"evseId":%v,"remoteStartId":%v,"idToken":"%v","chargingProfile":{"id":%v,"stackLevel":%v,"chargingProfilePurpose":"%v","chargingProfileKind":"%v","chargingSchedule":[{"chargingRateUnit":"%v","chargingSchedulePeriod":[{"startPeriod":%v,"limit":%v}]}]},"groupIdToken":"%v"}]`,
messageId, remotecontrol.RequestStartTransactionFeatureName, *evseId, remoteStartID, idToken, chargingProfile.ID, chargingProfile.StackLevel, chargingProfile.ChargingProfilePurpose, chargingProfile.ChargingProfileKind, schedule[0].ChargingRateUnit, schedule[0].ChargingSchedulePeriod[0].StartPeriod, schedule[0].ChargingSchedulePeriod[0].Limit, groupIdToken)
requestJson := fmt.Sprintf(`[2,"%v","%v",{"evseId":%v,"remoteStartId":%v,"idToken":{"idToken":"%s","type":"%s"},"chargingProfile":{"id":%v,"stackLevel":%v,"chargingProfilePurpose":"%v","chargingProfileKind":"%v","chargingSchedule":[{"id":%v,"chargingRateUnit":"%v","chargingSchedulePeriod":[{"startPeriod":%v,"limit":%v}]}]},"groupIdToken":{"idToken":"%s","type":"%s"}}]`,
messageId, remotecontrol.RequestStartTransactionFeatureName, *evseId, remoteStartID, idToken.IdToken, idToken.Type, chargingProfile.ID, chargingProfile.StackLevel, chargingProfile.ChargingProfilePurpose, chargingProfile.ChargingProfileKind, schedule[0].ID, schedule[0].ChargingRateUnit, schedule[0].ChargingSchedulePeriod[0].StartPeriod, schedule[0].ChargingSchedulePeriod[0].Limit, groupIdToken.IdToken, groupIdToken.Type)
testUnsupportedRequestFromChargingStation(suite, request, requestJson, messageId)
}
Loading

0 comments on commit b542323

Please sign in to comment.